public static E Read<E>(this BinaryReader reader) where E : struct, System.Enum
public static T Read<T>(this BinaryReader r) where T : IBinarySerializable, new()
В итоге "error CS0111: Type 'Extentions' already defines a member called 'Read' with the same parameter types"
как разрулить чисто через contraints?
ЖПТ предложил много чего в том числе и не работающий
public static T Read<T>(this BinaryReader reader) where T : class, IBinarySerializable, new()
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
The signature of a method specifically does not include the return type, parameter names, type parameter names, type parameter constraints, the params or this parameter modifiers, nor whether parameters are required or optional.
Здравствуйте, Barbar1an, Вы писали:
B>как разрулить чисто через contraints?
В таком виде как есть никак, как уже ответили.
B>ЖПТ предложил много чего в том числе и не работающий
Жаль, а мог и предложить.
Есть вариант добавить параметр и тогда можно будет разрулить.
На ваше усмотрение подходит такой вариант или нет.
using System;
using System.IO;
public interface IBinarySerializable {}
public class Read<T> {}
public class RequireBinarySerializableNew<T>
where T : IBinarySerializable, new()
{}
public static class C
{
// Тут для простоты не добавил.public static E Read<E>(this BinaryReader reader) where E : struct, System.Enum
{
Console.WriteLine("where E : struct, System.Enum");
return new();
}
public static T Read<T>(this BinaryReader r, RequireBinarySerializableNew<T>? _ignore = null)
where T : IBinarySerializable, new()
{
Console.WriteLine("where T : IBinarySerializable");
return new();
}
}
class ClassBinarySerializable : IBinarySerializable
{
public ClassBinarySerializable() {}
}
enum TestEnum {}
class A{
public static void Main() {
var a = new BinaryReader(new MemoryStream());
a.Read<TestEnum>();
a.Read<ClassBinarySerializable>();
}
}
Здравствуйте, _NN_, Вы писали:
_NN>Есть вариант добавить параметр и тогда можно будет разрулить.
ыыыыыыыыы, гыыыыы)
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Barbar1an, Вы писали:
B>public static E Read<E>(this BinaryReader reader) where E : struct, System.Enum
Учти, что это не очень хорошая идея всегда ведущая к боксингу. System.Enum — это референсный тип. Переданное значение энума будет всегда бокситься, чтобы привестить к нему.
В 8-ом дотнете появилась возможность делать констрейн unmanaged. При этом с энумом можно работать как с числовым типом и не производится боксинга.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.