У меня есть список экземпляров BasicReference и TaggableReference, который реализует обобщенный c интерфейс IReference
BasicReference.cs
namespace DefaultNamespace
{
public class BasicReference : IReference<string>
{
public string Resolve(string name)
{
return name;
}
public bool Valid(string name)
{
return (name != null);
}
}
}
TaggableReference.cs
namespace DefaultNamespace
{
public class TaggableReference : IReference<(string,string)>
{
public (string,string) Resolve(string name)
{
return (name + "1",name + "2");
}
public bool Valid(string name)
{
return (name != null);
}
}
}
IReference.cs
namespace DefaultNamespace
{
public interface IReference<out T>
{
T Resolve(string name);
bool Valid(string name);
}
}
Я могу добавить BasicReference и TaggableReference в список, где параметр Type является объектом. Но как мне привести их к вызову методов из IReference? И какой тип я возвращаю из метода?
using System.Collections.Generic;
namespace DefaultNamespace
{
public class Test
{
private List<object> references = new List<object>();
public ??? Test()
{
references.Add(new BasicReference());
references.Add(new TaggableReference());
string referenceExample = "example";
foreach (var reference in references)
{
// How can I cast this so I can call IReference methods and return the type
// What type do I return from method?
if (reference.Valid(referenceExample))
{
??? result = reference.Resolve(referenceExample);
}
}
}
}
}