Как привести не универсальный делегат к универсальному делегату - PullRequest
0 голосов
/ 09 октября 2018

Я хотел бы создать экземпляр ValueGetter со следующей подписью:

public delegate void ValueGetter<TValue>(ref TValue value);

Экземпляр должен выдать исключение, если TValue не относится к типу intи установите value на myInt в противном случае.

Лучшее, что я могу придумать, это:

public void GetVal<TValue>(ref TValue val)
{
    if (typeof(TValue) != typeof(int))
        throw new NotSupportedException();
    val = (TValue)(object)myInt;
}

Однако это не идеально, так как включает в себя бокс.Есть ли лучший способ?

1 Ответ

0 голосов
/ 09 октября 2018

Во-первых, я не уверен, что код на самом деле содержит значение.Он будет отображаться только в том случае, если вы сохранили значение в переменной object, чего вы не делаете.Вы просто разыгрываете его дважды, что в реальности может быть оптимизировано.

Во-вторых, неясно, почему это будет проблемой .

В-третьих, выдается исключениестранный.При каких обстоятельствах будет использоваться нечто иное, чем int?Является ли исключение подходящим ответом в этих случаях?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...