2015-07-02 2 views
0

У меня проблема с перегрузкой метода, о которой я просил в предыдущей публикации. После некоторых отзывов и исследований я убежден, что мне нужно по умолчанию передать некоторые значения, передаваемые в моем методе.Есть ли значение по умолчанию для типа данных объекта?

Мой вопрос: есть ли значение по умолчанию для типа данных объекта? Если, пожалуйста, укажите пример.

Вот пример дефолте string и int параметра:

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

Для получения копии моего кода смотрите: OP

+1

нуль ........... – Sam

ответ

2

Единственное значение, которое можно использовать для значения по умолчанию необязательный object параметр null - или, что то же самое, default(object). Других констант времени компиляции типа object нет. Я немного удивлен тем, что вы не можете использовать строковый литерал, учитывая, что string неявно конвертируются в object, но компилятор предупреждает, что :(

Сказав все это, если вы идете за спиной компилятора вы можете делать больше, чем ... вы можете использовать DefaultParameterValueAttribute и OptionalAttribute создать дополнительные параметры типа 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); 
    }  
} 

Я бы советовал делать это, хотя - это несколько противов. дух вещей ...

+0

Попробую другой маршрут, спасибо за Информация! – user4966755

0

по умолчанию для типов объектов является нулевым, check

и для проверки отдыха this one

+1

Ну, для типов значений это «значение, полученное установкой всех полей в значения по умолчанию». 'DateTime' - тип значения, и вы не можете сказать, что значение по умолчанию' DateTime' равно 0, поскольку значение 0 не является значением DateTime. –

+0

@JonSkeet Моя ошибка, мистер Скит –

Смежные вопросы