메소드를 액션으로 전달하려고 시도하고 있습니다.하지만 캐스팅은 말할 필요가 없습니다. 액션에 매개 변수로 함수를 전달하십시오.
이
내가 그 일을하고 어떻게 :public class RequestHandler<T> where T : struct
{
public enum EmployeeRequests { BasicDetails, DependentsAndEmergencyContacts , MedicalHistory }
protected Dictionary<T, Action> handlers = new Dictionary<T, Action>();
protected EmployeeManagement empMgmnt = new EmployeeManagement();
public void InitializeHandler(int employeeID)
{
this.AddHandler(EmployeeRequests.BasicDetails,() => empMgmnt.GetEmployeeBasicDetails(0));
}
public void AddHandler(T caseValue, Action action)
{
handlers.Add(caseValue, action);
}
public void RemoveHandler(T caseValue)
{
handlers.Remove(caseValue);
}
public void ExecuteHandler(T actualValue)
{
ExecuteHandler(actualValue, Enumerable.Empty<T>());
}
public void ExecuteHandler(T actualValue, IEnumerable<T> ensureExistence)
{
foreach(var val in ensureExistence)
if (!handlers.ContainsKey(val))
throw new InvalidOperationException("The case " + val.ToString() + " is not handled.");
handlers[actualValue]();
}
}
을 그리고 이것은 내가 매개 변수로 전달하고 제 기능입니다 :
public object GetEmployeeBasicDetails(int employeeID)
{
return new { First_Name = "Mark", Middle_Initial = "W.", Last_Name = "Rooney"};
}
나는이 오류가 무엇입니까 :
을Overloaded method has some invalid arguments.
업데이트
이 내가이 문제를 해결 얻을 관리하는 방법입니다 : Action<T>
이 매개 변수 T
을 가지고 아무것도 돌려주지해야하기 때문에
public static class RequestHandler
{
public enum EmployeeRequests { BasicDetails = 0, DependentsAndEmergencyContacts = 1 , MedicalHistory = 2 }
private static Dictionary<EmployeeRequests, Func<object>> handlers = new Dictionary<EmployeeRequests, Func<object>>();
public static void InitializeHandler(int employeeID)
{
Func<object> EmpBasicDetails = delegate { return EmployeeManagement.GetEmployeeBasicDetails(0); };
AddHandler(EmployeeRequests.BasicDetails, EmpBasicDetails);
}
private static void AddHandler(EmployeeRequests caseValue, Func<object> empBasicAction)
{
handlers.Add(caseValue, empBasicAction);
}
public static void RemoveHandler(int caseValue)
{
var value = (EmployeeRequests)Enum.Parse(typeof(EmployeeRequests), caseValue.ToString());
handlers.Remove(value);
}
public static object ExecuteHandler(int actualValue)
{
var request = (EmployeeRequests)Enum.Parse(typeof(EmployeeRequests), actualValue.ToString());
return handlers[(EmployeeRequests)request]();
}
}
:
당신은 당신의 메소드를 호출하고 출력을 무시 람다를 전달하여이 문제를 해결할 수 있습니까? – SLaks
조치는 특히 void 리턴 유형 및 매개 변수가없는 메소드입니다. 메서드는 객체 반환 형식 및 int 매개 변수를 Action으로 처리 할 수 없습니다. 설정하려고하는 것은 Func과 일치하는 방법입니다. –
GetEmployeeBasicDetails에서 익명 객체를 반환하면 안됩니다. http://stackoverflow.com/questions/1070526/how-to-return-anonymous-type-from-c-sharp-method-that-uses-linq-to-sql –