簡體   English   中英

如何將函數泛型參數分配給強類型變量?

[英]how to assign a function generic parameter to a strongly typed variable?

我有以下功能:

public override void LoadDataToControls<T>(T Id)
{

}

我想將Id參數分配給函數內部的Guid變量,我該如何實現?

這是抽象基類代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace BMS.Classes.Helpers
{
    public abstract class BasicPageFunctionsHelper : System.Web.UI.Page
    {
        public abstract void BindGrid();
        public abstract void ClearControls();
        public abstract void LoadDataToControls<T>(T ID);
        public abstract void EnableDisableControls(bool Enable);
        public abstract void SetPageStatus(EnumHelper.PageStatus PageStatus);
        public abstract bool ValidateInsert();
        public abstract bool ValidateUpdate();
        public abstract bool ValidateDelete();
    }
}

我想將Id參數分配給函數內部的Guid變量,我該如何實現?

如果我理解正確的話:

Guid guid = Guid.Parse(Id.ToString());

或者使用Guid.TryParse ,如果傳遞的類型不是GUID,則不會給出異常。 喜歡:

Guid guid;
if (Guid.TryParse(Id.ToString(), out guid))
{
    //successfull parsing
}
else
{
    //not a guid
}

雖然 ,如果您的方法正在處理特定類型,那么首先將它作為通用方法並不真正有用。

編輯:如果您傳遞GUID類型的對象,那么你可以比較它的類型is這樣的:

Guid guid;
if (Id is Guid)
{
    guid = (Guid)(object)Id;
}

(這已經在@Sriram Sakthivel 回答中提到了)

為了完成,這可能是更好的方法。 定義具有所需功能的接口,然后在通用定義中要求該接口。 這將迫使程序員和編譯器確保100%類型安全的運行時代碼。

public interface IASGUID
{
   Guid GetGuid();
}


public override void LoadDataToControls<T>(T Id) Where T : IASGUID
{

  // then auto type-checked -- no run-time error possible.

  Guid guid = Id.GetGuid(); 

}

如果我理解正確,那么您需要將ID分配給Guid

嘗試這個。 注意這涉及裝箱/拆箱可能不是最佳方式。 但如果你不關心性能,這應該會有所幫助。

public override void LoadDataToControls<T>(T Id)
{
    if(id is Guid)
    {
        Guid guid = (Guid)(object)id;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM