2017-08-08 64 views
-1

下面的代码工作时,我输入一个像“15”字符串,但是当我给它一个像15这样的整数,它给了我错误说:“无法投入类型'System.Int32'的对象键入'System.String” 。有没有一种通用的方式来进行此转换?

如何编辑此代码以允许整数输入?注:我是做转换为内循环

using System; 
using System.Threading; 


namespace ConsoleApplication24 
{ 
internal class Program 
{ 
    public static void ThreadMethod(object o) 
    { 
     for (int i = 0; i < Int32.Parse((string)o); i++) 
     { 
      Console.WriteLine("ThreadProc: {0}", i); 
      Thread.Sleep(0); 
     } 
    } 

    private static void Main(string[] args) 
    { 
     Thread t = new Thread(new ParameterizedThreadStart(ThreadMethod)); 
     t.Start("15"); 
     t.Join(); 
    } 
} 
} 
+0

'TheVariable.ToString()'? –

+0

这似乎是一个非常糟糕的主意。使其进入正常状态。 –

+0

方法应该在他们期望的输入中明确。当方法想要的是'int'时传递'object'是误导性的。 – Nkosi

回答

1

尝试

public static void ThreadMethod(object o) 
{ 
    var limit = o is string ? Int32.Parse((string)o) : (int)o; 
    // OR var limit = Int32.Parse(o.ToString()); 

    for (int i = 0; i < limit; i++) 
    { 
     Console.WriteLine("ThreadProc: {0}", i); 
     Thread.Sleep(0); 
    } 
} 
+1

为什么低估?这个答案似乎是唯一回答这个问题的答案......? – Kris

+1

但他只问int和字符串...否则自c#7你可以使用开关来确定其他预期的类型... – Kris

+1

这看起来很优雅 – Lyrk

1

只是传递一个int,而不是一个字符串,删除Int32.Parse((string)o)部分和投oint

for (int i = 0; i < (int)o; i++) 

如果你想支持的字符串,以及,你就必须做一些调查(这里用C#7的模式匹配):

int val = /* some default */; 
if (o is int oInt) val = oInt; 
if (o is string oString) val = Int32.Parse(oString); 

如果你需要比单参数的详细数据,你将不得不传递一个对象(并将其转换)。

class Data 
{ 
    string oString { get; set; } 
    int oInt { get; set; } 
} 
+0

但如果我这样做“15”输入将无法工作这一次。我需要两个输入工作。 – Lyrk

1

有几件事情,你可以在这里做。最简单的是不使用这种类型的转换。当你要去一个字符串,它是非常容易的:

for (int i = 0; i < Int32.Parse(o.ToString()); i++)... 

然而,一个更清洁的方式向这将是超载方法:

public static void ThreadMethod(object o) 
{ 
    ThreadMethod(Int32.Parse(o.ToString())); 
} 

public static void ThreadMethod(int o) 
{ 
    for (int i = 0; i < o; i++) 
    { 
     Console.WriteLine("ThreadProc: {0}", i); 
     Thread.Sleep(0); 
    } 
} 

尽管这增加了量的代码,它使你的方法更具可读性。在调用之前,您还可以通过执行检查来将您的呼叫分离出来,方法为int。通常情况下,你会遇到你不想调用其他方法的情况。即使如此,这种方式消除了正在做你想做的方法内部的模糊性和失败的可能性。

相关问题