2014-01-21 3 views
0

Я очень новичок в C#, поэтому, пожалуйста, несите меня.Метод создания: ошибка NullReferenceException

Это мой существующий блок кода.

public static class DummyClassName 
{ 
    public static T DummyTemplateFunc1<T>(DummyInterfaceName aaa1, Func<T> action1) 
    { 
     T DummyVal1 = action1(); 
     { 
      string strVal = aaa1.SomethingInInterface(); 
      // similar code 
     } 
     return DummyVal1; 
    } 

    public static T DummyTemplateFunc2<T>(DummyInterfaceName aaa1, Func<T> action2) 
    { 
     T DummyVal2 = action2(); 
     { 
      string strVal = aaa1.SomethingInInterface(); 
      // similar code 
     } 
     return DummyVal2; 
    } 
} 

Моя задача - избежать повторения кода и сделать другой метод обработки повторяющегося кода. Это то, что я пробовал.

public static class DummyClassName 
{ 
    public static void DummyMethodName(DummyInterfaceName aaa1) 
    { 
     string strVal = aaa1.SomethingInInterface(); 
     // similar code 
    } 

    public static T DummyTemplateFunc1<T>(DummyInterfaceName aaa1, Func<T> action1) 
    { 
     T DummyVal1 = action1(); 
     DummyMethodName(aaa1); 
     return DummyVal1; 
    } 

    public static T DummyTemplateFunc2<T>(DummyInterfaceName aaa1, Func<T> action2) 
    { 
     T DummyVal2 = action2(); 
     DummyMethodName(aaa1); 
     return DummyVal1; 
    } 

} 

Но это дает мне ошибку

"System.NullReferenceException: Object reference not set to an instance of an object." 

При тестировании.

Что я делаю неправильно? Может ли кто-нибудь предложить обходной путь?

+7

На какой строке точно? Используйте отладчик. –

+4

Используйте отладчик, чтобы узнать, что равно null. – SLaks

+0

Проверьте параметр перед тем, как использовать его, и если null выдает исключение. –

ответ

0
public static T DummyTemplateFunc2<T>(DummyInterfaceName aaa1, Func<T> action2) 
{ 
    T DummyVal1 = action1(); 
    DummyMethodName(aaa1); 
    return DummyVal1; 
} 

Линия, которая использует action1 должна использовать action2, верно? action1 бросает ссылку nullpointer, потому что он не знает, где ее искать, поскольку это не входит в объем вашего метода.

+0

Прошу прощения, я ошибся, набрав свой вопрос. Моя цель такова: вы видите // аналогичный код, который повторяется дважды в блоке 1 кода? Мне нужно создать отдельный метод для этого и вызвать этот метод внутри двух существующих шаблонов. Это ясно? – user3207920

+0

Я редактировал вопрос сейчас. – user3207920

+0

Я понимаю, что вы имеете в виду, но покажите нам код, который вы хотите обобщить. Это не очень помогает. Все, что мы можем сказать сейчас, это «извлечь его в метод», который является таким же общим, как ваше объяснение. :) –

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