0

私は次の機能を持っています:

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();
    }
}
4

3 に答える 3

3

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の回答ですでに言及されています)

于 2013-10-01T18:06:39.190 に答える
0

完全にするためには、これがより良い方法かもしれません。必要な機能を持つインターフェイスを定義し、ジェネリック定義でそのインターフェイスを要求します。これにより、プログラマーとコンパイラーは、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(); 

}
于 2013-10-01T18:16:11.253 に答える
-1

私が正しく理解している場合は、IDをに割り当てる必要がありますGuid

これを試して。これには、ボックス化/ボックス化解除が最適な方法ではない可能性があることに注意してください。ただし、パフォーマンスを気にしない場合は、これが役立つはずです。

public override void LoadDataToControls<T>(T Id)
{
    if(id is Guid)
    {
        Guid guid = (Guid)(object)id;
    }
}
于 2013-10-01T18:18:13.970 に答える