对象数据类型是否有默认值?

时间:2015-07-02 21:35:45

标签: c# .net

我有方法过载问题,我在之前的帖子中已经问过这个问题。经过一些反馈和研究后,我确信我需要默认一些在我的方法中传递的值。

我的问题是:对象数据类型是否有默认值?如果,请举例说明。

以下是默认stringint参数的示例:

public void ExampleMethod(int required, string optionalstr = "default string",
    int optionalint = 10)

有关我的代码的副本,请参阅:OP

2 个答案:

答案 0 :(得分:2)

可用于可选object参数默认值的唯一值是null - 或等效地default(object)。没有其他类型object的编译时常量。鉴于string可隐式转换为object,我不能使用字符串文字,我感到有些惊讶,但编译器会阻止:{/ p>

说完所有这些后,如果你回到编译器的后面,可以做更多的事情......你可以使用DefaultParameterValueAttributeOptionalAttribute使用字符串和数值创建类型为object的可选参数。例如:

using System;
using System.Runtime.InteropServices;

class Test
{ 
    static void Main(string[] args) 
    {
        Foo(); // Prints 5 test
    }

    static void Foo([Optional, DefaultParameterValue(5)] object x,
                    [Optional, DefaultParameterValue("test")] object y)
    {
        Console.WriteLine("{0} {1}", x, y);
    }    
}

我建议不要这样做 - 这有点违背事物的精神......

答案 1 :(得分:0)

对象类型的默认值为null, check

并进行其余检查this one