我需要你的帮助。我遇到以下情况,我有一种方法必须确定一些条件,并根据这些条件返回特定类型的对象。
现在,我不想将public object methodXY()
用作返回类型的object
,但我认为这种方法似乎还行不通。
public T methodXY<T>()
{
if (condition A)
return (T)Convert.ChangeType(myValue, typeof(myType));
else if (condition B)
return (T)Convert.ChangeType(myValue, typeof(myOtherType));
else
throw new exception("xyz")
}
但是,看来我在调用该方法时必须已经设置了返回类型。那就是我不想要,也不能。
//myType looks like this
public class myType
{
public string name;
public string firstname;
public string address;
}
和
//myOtherType looks like
public class myOtherType
{
public string name;
public string firstname;
}
您需要更多或更详细的信息吗?让我知道。
预先感谢:-)
编辑:
这是使用object
public object myMethod(MyDto myDto)
{
userHasRoles = GetUserRoles();
if (userHasRoles .Contains("Admin"))
return (mapper.Map<myType>(myDto));
else if (userHasRoles.Contains("User"))
return (mapper.Map<myOtherType>(myDto));
throw new Exception("No elements!");
}
答案 0 :(得分:1)
据我了解的问题,当检索者是管理员时,您需要返回更完整的数据,否则请返回一个不太完整的数据。
如果这是目标,那么您可以从数据库中检索适当的数据并填写以下类别之一的对象:
public class PersonData {
public string Name { get; private set; }
public string Surname { get; private set; }
}
public class ExtendedPersonData: PersonData {
public string Name { get; private set; }
public string Surname { get; private set; }
public string Address { get; private set; }
}
由于后一个类继承自前一个类,因此您只需创建一个List<PersonData>
即可涵盖这两种情况。
另一种不同的方法:数据类考虑了用户以便返回或不返回某些数据:
class Person {
public Person(User usr, string address)
{
this.User = usr;
this.address = address;
}
public string User { get; private set; }
public string Name { get; private set; }
public string Surname { get; private set; }
public string Address {
get {
string toret = "N/A";
if ( this.User.IsAdmin() ) {
toret = this.address;
}
return toret;
}
}
private string address;
}
这两种解决方案都不是完美的,并且都有各自的问题,但是至少不能解决您所说的问题。
希望这会有所帮助。