我目前已经完成了构建脚本,并且已经开始进行一些C#编程。
这就是我所拥有的:
public bool resultOfOperation(bool firstOperator, bool secondOperator, string operation)
{
//The bool value in the dictionary is gotten by used the corresponding operation method in the operation class.
Dictionary<string, bool> mappedObjects = new Dictionary<string, bool>();
mappedObjects.Add("OR", new OrOperator().operationOR(firstOperator,secondOperator));
foreach (KeyValuePair<string, bool> keyAndValue in mappedObjects)
{
if (keyAndValue.Key == operation.ToUpper())
return keyAndValue.Value;
}
throw new ArgumentException("Something has gone very wrong.");
}
虽然这有效,但我想做点其他事情。我希望字典能够保存字符串和对象。然后我想根据我提供对象的方法使用正确的对象。
示例(不起作用)
Dictionary<string, object> test = new Dictionary<string, object>();
foreach (KeyValuePair<string, object> keyAndValue in test)
{
if(keyAndValue.Key == "SomethingValue")
keyAndValue.Value.USE METHOD OF CLASS HERE;
}
我应该提到所有类都有类似的方法,例如bool FUNCTIONname(bool运算符)。
我相当肯定我有匿名和代表,但我不知道如何。我很感激任何帮助。
答案 0 :(得分:1)
您应该使用相同的方法名称,而不是使用唯一的方法名称,并利用类型系统来获得优势!例如:
abstract class Operation {
public abstract bool DoOperation(bool left, bool right);
}
class OrOperation {
public override bool DoOperation(bool left, bool right) {
return left || right;
}
}
class DoOperationStuff {
Dictionary<string, Operation> mappedObjects = new Dictionary<string, Operation>() {
{"OR", new OrOperation()}
};
public bool resultOfOperation(bool left, bool right, string operation) {
if(mappedObjects.ContainsKey(operation)) {
return mappedObjects[operation].DoOperation(left, right);
}
throw new ArgumentException("Something has gone very wrong.");
}
}
这应该是相当的解释,但是:
DoOperation
被标记为抽象,所以程序知道要查看对象的真实类型,以便知道要调用的内容。Operation
个对象,每个对象实际上都是OrOperation
或其他任何对象,并且会调用其各自的方法。答案 1 :(得分:1)
正如已经提到的,接口或继承是解决此问题的首选方法。
如果由于某种原因你无法使用它们,那么你需要反思。 (对不起,我是VB程序员,所以我的c#语法可能有问题,希望你能得到这个想法)
对象o =要操作的对象
MethodInfo m = typeof(o)。GetMethod(“Call Name to Call”);
m.Invoke(O);
答案 2 :(得分:0)
也许新的Func&lt;&gt;()可能会有所帮助? http://tekpub.com/view/concepts/2