2010-03-30 3 views
0

여러 가지 컨트롤 유형 (이 경우 레이블 및 패널)을 허용하는 메서드를 만들려고합니다. IConvertible이 이러한 형식을 변환하지 않기 때문에 변환이 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 덕분에 사전에여러 컨트롤 유형을 처리하는 메서드 만들기

public void LocationsLink<C>(C control) 
    { 
     if (control != null) 
     { 
      WebControl ctl = (WebControl)Convert.ChangeType(control, typeof(WebControl)); 
      Literal txt = new Literal(); 
      HyperLink lnk = new HyperLink(); 
      txt.Text = "If you prefer a map to the nearest facility please "; 
      lnk.Text = "click here"; 
      lnk.NavigateUrl = "/content/Locations.aspx"; 
      ctl.Controls.Add(txt); 
      ctl.Controls.Add(lnk); 
     } 
    } 

답변

3

당신과 같이 제어의 경우 제약 조건을 싶지 않을 것이다 :

public void LocationsLink<C>(C control) where C : WebControl 
{ 
    if (control == null) 
     throw new ArgumentNullException("control"); 

    Literal txt = new Literal(); 
    HyperLink lnk = new HyperLink(); 
    txt.Text = "If you prefer a map to the nearest facility please "; 
    lnk.Text = "click here"; 
    lnk.NavigateUrl = "/content/Locations.aspx"; 
    control.Controls.Add(txt); 
    control.Controls.Add(lnk); 
} 

where 제약 힘 control 유형의 WebControl의 수 그래서 변환이 필요하지 않습니다. where 제약 때문에 control은 클래스이며 null과 비교할 수 있으며 Controls 컬렉션이 있다는 것을 알고 있습니다.

control이 null 인 경우 예외를 throw하도록 코드를 변경합니다. null 인수가 전달 된 상황을 그냥 무시하고 싶다면 throw new ArgumentNullException("control");return null;으로 변경하면됩니다. 컴파일 제약 조건을 감안할 때, 당신의 루틴에 null을 전달하는 것은 예상치 못한 일이지만 예외를 throw해야한다고 생각 하겠지만 코드가 어떻게 사용될 것인지는 모른다.

+0

답변 해 주셔서 감사합니다. 한 걸음 더 나아가 전환을 촉진하기 위해 내가 그 방법에서 무엇을 할 것인지를 보여줄 수 있습니까? 그 동안 제약 조건을 연구 할 예정입니다. – Praesagus

+0

나는 내 게시물을 확장했다. – Thomas

+0

시간을내어 설명해 주셔서 감사합니다. 방금 다른 멋진 도구를 주셨습니다. – Praesagus