Есть класс Parameters
public class Parameters
{
private readonly IArgument[] _arguments;
private readonly (string Key, Type Type)[] _keyType;
public Parameters(params (string, Type)[] keyType)
{
_keyType = keyType;
_arguments = new IArgument[keyType.Length];
for(int i = 0; i < _arguments.Length; i++)
{
Type type = _keyType[i].Type;//Вот здесь тип извлекается, и им нужно типизировать обощенный класс Argument
_arguments[i] = new Argument<type>(default);//CS0118
}
}
public IArgument this [string key]
{
get
{
for(int i = 0;i < _keyType.Length;i++)
if(_keyType[i].Key == key)
return _arguments[i];
throw new ArgumentException("");
}
set
{
for(int i = 0;i < _keyType.Length;i++)
if(_keyType[i].Key == key)
_arguments[i] = value;
throw new ArgumentException("");
}
}
}
Есть класс Argument обобщенный.
public record struct Argument<T> : IArgument
{
object IArgument.Value { get; set; }
public T Value
{
get => Value;
set => Value = value;
}
public Argument(T value) => Value = value;
}
public interface IArgument
{
object Value { get; set; }
}
Надо задать у него тип налету, как это сделать?
for(int i = 0; i < _arguments.Length; i++)
{
Type type = _keyType[i].Type;//Вот здесь тип извлекается, и им нужно типизировать обощенный класс Argument
arguments[i] = new Argument<type>(default);//CS0118
}
В
CS0118 ->
"To resolve this error, make sure that the operation you are performing is valid for the type you are performing the operation on."
"Чтобы разрешить эту ошибку, убедитесь, что операция, которую вы выполняете, действительна для типа, в котором вы выполняете операцию."
Вообще не ясно, что это предлагают сделать.