У меня есть класс, который инкапсулирует универсальный класс T, и в нем есть неявный оператор для преобразования инкапсулирующего класса в T.
Однако это преобразование используется только в том случае, если я привожу явно в вызывающем коде.
Я не нашел никаких применимых правил.
Это .Net 8.0, C# 12.
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
var r = new Result(new Contact() { FullName = "Otto" });
Console.WriteLine(r.Value.FullName); // This works, no surprise
Console.WriteLine(r.FullName); // Squiggly under FullName. CS1061: 'Result' does not contain a definition for 'FullName' and no accessible extension method...
Console.WriteLine(((Contact)r).FullName); // Explicit cast works
}
}
public class Contact
{
public string FullName { get; set; } = "";
}
public class Result
{
public T Value { get; }
public int Index { get; }
public Result(T value)
{
Value = value;
Index = 0;
}
public Result(T value, int index)
{
Value = value;
Index = index;
}
public static implicit operator T(Result result)
{
return result.Value;
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... s-not-used
Определенное пользователем неявное приведение к универсальному не используется. ⇐ C#
Место общения программистов C#
1728465261
Anonymous
У меня есть класс, который инкапсулирует универсальный класс T, и в нем есть неявный оператор для преобразования инкапсулирующего класса в T.
Однако это преобразование используется только в том случае, если я привожу явно в вызывающем коде.
Я не нашел никаких применимых правил.
Это .Net 8.0, C# 12.
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
var r = new Result(new Contact() { FullName = "Otto" });
Console.WriteLine(r.Value.FullName); // This works, no surprise
Console.WriteLine(r.FullName); // Squiggly under FullName. CS1061: 'Result' does not contain a definition for 'FullName' and no accessible extension method...
Console.WriteLine(((Contact)r).FullName); // Explicit cast works
}
}
public class Contact
{
public string FullName { get; set; } = "";
}
public class Result
{
public T Value { get; }
public int Index { get; }
public Result(T value)
{
Value = value;
Index = 0;
}
public Result(T value, int index)
{
Value = value;
Index = index;
}
public static implicit operator T(Result result)
{
return result.Value;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79069344/user-defined-implicit-cast-to-generic-is-not-used[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия