我已經宣佈了一個接口與Add
方法添加新項目,2類TopicModel
和CommentModel
來存儲數據。使用params關鍵字與動態類型參數
我重新寫在控制檯模式下的代碼,就像這樣:
interface IAction
{
void Add<T>(params T[] t) where T : class;
}
class TopicModel
{
public string Id { get; set; }
public string Author { get; set; }
}
class CommentModel
{
public string Id { get; set; }
public string Content { get; set; }
}
class Topic : IDisposable, IAction
{
public void Add<T>(params T[] t) where T : class
{
var topic = t[0] as TopicModel;
var comment = t[1] as CommentModel;
// do stuff...
}
public void Dispose()
{
throw new NotImplementedException();
}
}
class MainClass
{
static void Main()
{
var t = new TopicModel { Id = "T101", Author = "Harry" };
var c = new CommentModel { Id = "C101", Content = "Comment 01" };
using (var topic = new Topic())
{
//topic.Add(t, c);
}
}
}
線topic.Add(t, c)
給我的錯誤信息:
的方法「Topic.Add類型參數( params T [])'不能從 推斷出來的用法。嘗試明確指定類型參數。
topic.Add(c, c) // Good :)) topic.Add(t, t, t); // That's okay =))
這是我的問題:
然後,我已經再次嘗試。我想要的方法接受2種不同的類型(TopicModel
和CommentModel
)。
而且,我不想聲明:
interface IAction
{
void Add(TopicModel t, CommentModel c);
}
,因爲其他類可以重新使用不同的參數類型中Add
方法。
所以,我的問題是:如何更改params T[] t
接受多個參數類型?
該代碼根本不是通用的。您希望調用者傳遞正確類型的參數,但編譯器無法實際驗證和執行該參數。你可能會使用* object *。 –
「Add」方法有望與哪些類型配合使用?例如,它可以爲'int'類型工作嗎?在Add方法的主體中,您明確地將第一個參數轉換爲'TopicModel',將第二個參數轉換爲'CommentModel',這意味着您期待這些特定類型。您需要爲有關「Add」方法應該做什麼的問題添加更多上下文。 –
@YacoubMassad如果我把'topic.Add(t,c)'改爲'topic.Add(t,t)'或'topic.Add(c,c)',那麼它不會給我任何錯誤' –