我被告知在C#中没有可选参数这样的东西。 但是您可以使用重载功能并使用默认值输入变量,例如:
void Person(string name, int age)
void Person(string name)
和
void Person(string name, int age = 30)
我的问题是,当从VB6调用C#组件时,重载方法往往会将名称更改为例如“Person(字符串名称),Person _1 (字符串名称,int age)”等,以及变量当出“变量”变量时,不能使用默认值。
但是怎么样
void Person(string name, [Optional] int age)
...
有人可以向我解释这项工作是如何使用它来模拟VB6中的可选变量吗?
答案 0 :(得分:6)
从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
答案 1 :(得分:3)
C#4.0确实有可选参数:
public void MyMethod(string optionalParameter = "optional")
{
}
答案 2 :(得分:0)
我使用OptionalAttribute
对此进行了排序。我认为这是最好的解决方案,因为所有其他解决方案都应该耗费时间和全面。
要检查是否已传递可选属性,请使用:if(attr_optional != Type.Missing)
(要求可选属性的类型为object
)
答案 3 :(得分:-3)
你可以这样做:
void Person(string name, int? age)
{
if (!age.hasValue)
{
Console.WriteLine("The nullable integer parameter age wasn't provided with a value ..");
}
}
但是,您必须发送“null”而不是int。空虚不起作用。