嘿伙计们我是C#的新手,我想知道是否有一种简单的方法可以将字符串作为多个参数传递。这是一个例子:
我想传递给一个带有这些参数的函数:
DoStuff(int a, string b, string c, string d)
我有一个字符串,说“string e”包含以下内容: 1,A,B,C
所以我想像这样调用函数DoStuff(e)。但当然这会导致错误,因为它需要更多参数。有没有一种简单的方法可以将我的参数字符串传递给函数?
编辑:感谢关于函数重载的所有建议。这个函数是一个类构造函数,它可以有重载吗?这是代码
arrayvariable[count] = new DoStuff(e);
答案 0 :(得分:4)
您需要对方法进行重载,该方法需要单个字符串。然后它可以拆分字符串并创建适当的参数。
例如:
void DoStuff(int a, string b, string c, string d)
{
// Do your stuff...
}
void DoStuff(string parameters)
{
var split = parameters.Split(',');
if (split.Length != 4)
throw new ArgumentException("Wrong number of parameters in input string");
int a;
if (!int.TryParse(split[0], out a)
throw new ArgumentException("First parameter in input string is not an integer");
// Call the original
this.DoStuff(a, split[1], split[2], split[3]);
}
当然,有可能将这个重构为一个方法,这个方法可以使字符串解析更通用,并且可重用,如果这是你经常做的事情。
答案 1 :(得分:3)
public void DoStuff( int a, string b, string c, string d )
{
//your code here
}
public void DoStuff( string e )
{
string[] splitE = e.Split( ',' );
int a;
int.TryParse( splitE[0], out a );
DoStuff( a, splitE[1], splitE[2], splitE[3] );
}
你需要对int的拆分和解析进行额外的错误检查,但是应该为你做这件事
答案 2 :(得分:1)
public void DoStuff(int a, params String[] strings)
{
foreach (String s in strings)
{
do something else;
}
}
'params'属性表示DoStuff可以有0个或更多字符串作为参数,编译器会自动将它们填入数组中。
答案 3 :(得分:0)
只需创建一个只包含一个参数的重载方法:
DoStuff(string a){
DoStuff(0, a, "","");
}
(伪代码)
答案 4 :(得分:0)
这里有几个选项,具体取决于您实际要做的事情。一个是你可以拆分字符串并将每个部分发送到应该分配给它的特定参数(或者如果你想要的话,将完整的字符串发送到每个参数)。
另一个选项是重载方法,只接受一个参数(如果只需要一个)或将字符串拆分为部分然后调用原始方法。我建议不要在重载方法中拆分字符串,除非您确定字符串中的值的顺序是什么。我担心你在路上使用了重载,但是在字符串中得到了错误值的顺序。这会导致意想不到的结果。因此,我建议您使用第一个选项,除非您有明确的情况来创建重载方法。
答案 5 :(得分:0)
如果您拥有DoStuff
方法,请使用一个参数DoStuff(string e)
然后传递字符串并使用分隔符在方法中拆分字符串。
答案 6 :(得分:0)
您也可以将它们作为可选参数。 http://msdn.microsoft.com/en-us/library/dd264739.aspx
void DoStuff(string a, string b = null, string c = null, string d = null)
{
}
答案 7 :(得分:0)
Public void DoStuff(String e){
string[] params = s.Split(",");
int a = int.Parse(params[i]);
string b = params[1];
string c = params[2];
string d = params[3];
DoStuff(int a, string b, string c, string d);
}
答案 8 :(得分:0)
如果这些代表卡片,那么我将远离字符串,并创建一个真正的类型。也许是这样的:
public class Card
{
public int a;
public string b, c, d;
public Card(int a, string b, string c, string d)
{
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public static Card Parse(string input)
{
int a;
string b, c, d;
// There are several string splitting methods shown in other answers, pick the one you like.
return new Card(a, b, c, d);
}
}
让您的方法将Card作为参数,而不是字符串。您还可以将卡用于所有存储空间,即上面显示的arrayvariable[]
。
我建议您不要在班级中使用名称a,b,c,d,使用真实姓名。等级,套装等