亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有類約束的字段

具有類約束的字段

C#
蠱毒傳說 2022-11-21 21:26:20
我有一個具有類類型約束的泛型類型的類定義看起來像這樣public class ConnectedRepository<TEntity> where TEntity : class    {然后我在以下方法中使用它: public void LoadData<T>() where T:class        {             var GenRep = new ConnectedRepository<T>(c);            grdData.DataSource = GenRep.ToBindingList();        }我的問題是我需要在包含此方法的類中的其他地方使用 GenRep,因此我需要在此方法之外定義它,但我找不到正確的語法我需要這樣的東西:ConnectedRepository<??> GenRep;但無法找出正確的類型定義任何幫助將非常感激Code for my repository: public class ConnectedRepository<TEntity> where TEntity : class    {        internal DbContext _context;        internal DbSet<TEntity> _dbSet;        public ConnectedRepository(DbContext context)        {            _context = context;            _dbSet = context.Set<TEntity>();        }        public IEnumerable<TEntity> ToBindingList()        {            _dbSet.Load();            return _dbSet.Local.ToBindingList();        }        public void SaveChanges()        {            _context.SaveChanges();        }    }這將從包含 gridview 的用戶控件中使用public partial class DataView : DevExpress.XtraEditors.XtraUserControl {    TechnicalServicesContext c = new TechnicalServicesContext();   /// <summary>   ///    /// </summary>    public DataView()     {        InitializeComponent();    }    /// <summary>    ///     /// </summary>    /// <typeparam name="T"></typeparam>    public void LoadData<T>() where T:class    {         var GenRep = new ConnectedRepository<T>(c);        grdData.DataSource = GenRep.ToBindingList();    }   public void SaveData()    {    }}這是我想用于任何實體的可重復使用的顯示
查看完整描述

3 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

您不應為每種新數據類型的存儲庫創建新實例。對于許多不同的數據類型,它將消耗大量內存。您可以將靜態類包裝器與泛型方法一起使用


 public static class ConnectedRepository

    {

        private static DbContext _context;



        public static SetContext(DbContext context)

        {

            _context = context;


        } 


     public static IEnumerable<TEntity> ToBindingList<TEntity>() :  where TEntity : class

            {

                var dbSet = _context.Set<TEntity>();

                dbSet.Load()

                return dbSet.Local.ToBindingList();

            }

 }


查看完整回答
反對 回復 2022-11-21
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

我不確定你想要什么是完全清楚的。如果我猜對了,您想在周圍類的一個對象中的多個位置使用具有相同基礎類型的泛型 ConnectedRepository 的相同實例,那么我會說您需要制作依賴于它的類,而不僅僅是類的單個方法。


public class ConnectedRepository<TEntity,T>

   where TEntity : class

   where T:class

{

    ConnectedRepository<T> GenRep;


    public ConnectedRepository(int c)

    {

        GenRep = new ConnectedRepository<T>(c); // now sure what c is, bt you could pass it to the constructor like this, if GenRep needs it

    }


     public void LoadData()

     {

        grdData.DataSource = GenRep.ToBindingList();

     }


     public void DoStuff()

     {  // do something else with  GenRep ?

     }


 }


查看完整回答
反對 回復 2022-11-21
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

將其作為私有存儲在類中,例如

private ConnectedRepository<T> _genRep;

進一步看,你是說你想要一個 T 類型的泛型函數,而類頭中沒有提到 T?那是不允許的。泛型類操作的所有類型都必須在其頭文件中聲明,并且替換發生在編譯時。


查看完整回答
反對 回復 2022-11-21
  • 3 回答
  • 0 關注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號