0

有人告诉我,C# 中没有可选参数之类的东西。但是您可以使用重载功能并输入具有默认值的变量,例如:

void Person(string name, int age)
void Person(string name)

void Person(string name, int age = 30)

我的问题是,当从 VB6 重载方法调用 C# 组件时,往往会将名称更改为例如“Person(字符串名称),Person _1(字符串名称,整数年龄)”等,并且在beeing 时不能使用具有默认值的变量“出”变量。

但是怎么样

void Person(string name, [Optional] int age)

??

有人可以向我解释它是如何工作的,我是否可以用它来模拟 VB6 中的可选变量?

4

4 回答 4

5

从 C# 4 开始,有可选参数支持:

public void MyMethod(bool arg = false)
{

}

不确定如何从 VB6 调用它。

另一种可能的方法是将参数包装在另一个类中:

public class PersonSettings
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public Person(PersonSettings settings)
{

}

PersonSettings然后,您有一个参数,并且可以根据需要在类中使用默认值。

当然,您建议使用的OptionalAttribute也应该适合您。尽管我认为您需要摆脱重载的方法,或者使用接口仅将其中一种方法公开给 COM:

http://social.msdn.microsoft.com/Forums/en/clr/thread/048c0104-20ed-49af-a221-ddadb081989e

于 2011-08-22T12:12:31.297 回答
3

C# 4.0 确实有可选参数:

public void MyMethod(string optionalParameter = "optional")
{

}
于 2011-08-22T12:12:00.630 回答
0

我使用OptionalAttribute. 我认为这是最好的解决方案,因为所有其他解决方案都是耗时且全面的。要检查是否传递了可选属性,请使用:(if(attr_optional != Type.Missing)要求可选属性的类型为object

于 2011-08-26T10:35:44.107 回答
-2

你可以这样做:

void Person(string name, int? age)
{
    if (!age.hasValue)
    {
        Console.WriteLine("The nullable integer parameter age wasn't provided with a value ..");
    }
}

不过,您必须发送“null”而不是 int。空瓶不行。

于 2011-08-22T12:14:05.520 回答