传递参数

时间:2010-09-16 12:03:16

标签: c# .net-3.5 var

我将参数作为var类型传递给函数。它不接受,我如何传递给函数?

实施例

var Input = ................

listview1.itemsource = getinput(Input);

public List<answers>getinput(var inp)
{
................
..................
}

此处该功能不接受var。我该怎么办?

7 个答案:

答案 0 :(得分:6)

var 只能在同一语句中声明和初始化局部变量时使用;该变量不能初始化为null,也不能初始化为方法组或匿名函数。

MSDN:Implicitly Typed Local Variables

答案 1 :(得分:4)

var用于类型推断,而不是声明动态变量。使用实际输入类型作为inp的类型。

答案 2 :(得分:2)

它不接受第三行,因为您的函数属于void类型,并且您尝试将该函数的结果分配给listview1.itemsource

答案 3 :(得分:2)

正如其他人所说,你混合了隐式类型变量(类型推断)和一个显式类型的函数签名。

你应该拥有的是:

var Input = txtQuestion.text; // Implicitly typed variable of type string
listview1.itemsource = getinput(Input); 

// Strongly typed method taking string, returning List<answers> 
public List<answers>getinput(string question) 
{ 
    var result = new List<answers>();
    result.Add(answer);
    return result; 
} 

很抱歉,如果这与您的代码不完全匹配,但它应该展示您的目标。

var关键字用于从赋值运算符的右侧推断变量的类型。在方法的签名中,没有赋值运算符,因此无法进行推理。此外,您始终可以传递从基类派生的任意数量的类型,这将使​​编译器难以确定参数的正确类型。 (您的意思是DbReader,SqlDbReader还是IDbReader?)

可以推断出变量。参数不能。

答案 4 :(得分:1)

在函数中使用object而不是var。然后将其转换为函数内的相应类型。

答案 5 :(得分:1)

public void getinput(object inp)
{
................
..................
}

只要C#是强类型语言,编译器就会知道你的变量属于哪种真实类型:

var Input = ....

....的类型始终是已知的。这就是你无法宣布

的原因
var a;

这是你在

中想要做的事情
public void getinput(var inp)
{
    ................
    ..................
}

答案 6 :(得分:1)

var仅在JavaScript代码中用作变体。如果您使用var,则可以使用字符串或使用对象。

public void getinput(object inp) 
{ 
    ................ 
    .................. 
} 


public void getinput(string inp) 
{ 
    ................ 
    .................. 
}