Как преобразовать в строку общий аргумент «allows ref struct»?C#

Место общения программистов C#
Ответить
Anonymous
 Как преобразовать в строку общий аргумент «allows ref struct»?

Сообщение Anonymous »

У меня есть метод, который принимает общий аргумент T. T имеет анти-ограничение разрешений ref struct. Теперь я хочу проверить этот аргумент и в случае неудачи включить значение аргумента в сообщение об исключении. Поэтому я хочу преобразовать этот аргумент в строку. Возможно ли это? Все мои попытки до сих пор приводили к ошибкам компиляции.
void Method(T arg) where T : allows ref struct
{
// Cannot implicitly convert type 'T' to 'object'
throw new ArgumentException(arg.ToString());

// Argument 1: cannot convert from 'T' to 'bool'
throw new ArgumentException(Convert.ToString(arg));

// The type 'T' may not be a ref struct or a type parameter allowing ref structs
// in order to use it as parameter 'T' in the generic type
// or method 'DefaultInterpolatedStringHandler.AppendFormatted(T)'
throw new ArgumentException($"{arg}");
}

Онлайн-демо.
Есть ли какой-нибудь трюк, чтобы сделать это возможным?
Обновление: Я был бы удовлетворен, если бы мог найти способ отображать значение ограниченного набора типов T, например string:
void Method(T arg) where T : allows ref struct
{
// An expression of type 'T' cannot be handled by a pattern of type 'string'.
if (arg is string s) throw new ArgumentException(s);
}

Я тоже не нашел способа сделать это.
Исправление: Я слишком усердствовал в упрощении демо-версии. В действительности T определяется для включающего типа, а не для метода. Вот как выглядит мой настоящий код:
class MyClass where T : allows ref struct
{
public void Method(T arg)
{
throw new ArgumentException(arg.ToString()); // Compile error
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... c-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»