У меня есть метод, который принимает общий аргумент 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
Как преобразовать в строку общий аргумент «allows ref struct»? ⇐ C#
Место общения программистов C#
-
Anonymous
1771474030
Anonymous
У меня есть метод, который принимает общий аргумент T. T имеет анти-ограничение разрешений ref struct. Теперь я хочу проверить этот аргумент и в случае неудачи включить [b]значение[/b] аргумента в сообщение об исключении. Поэтому я хочу преобразовать этот аргумент в строку. Возможно ли это? Все мои попытки до сих пор приводили к ошибкам компиляции.
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}");
}
Онлайн-демо.
Есть ли какой-нибудь трюк, чтобы сделать это возможным?
[b]Обновление:[/b] Я был бы удовлетворен, если бы мог найти способ отображать значение ограниченного набора типов 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);
}
Я тоже не нашел способа сделать это.
[b]Исправление:[/b] Я слишком усердствовал в упрощении демо-версии. В действительности T определяется для включающего типа, а не для метода. Вот как выглядит мой настоящий код:
class MyClass where T : allows ref struct
{
public void Method(T arg)
{
throw new ArgumentException(arg.ToString()); // Compile error
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79891281/how-to-convert-to-string-an-allows-ref-struct-generic-argument[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия