![](/img/trans.png)
[英]object[] vs List<object> vs IEnumerable<object>
[英]object vs object[]
我正在研究一種采用object[]
參數的方法。 但是,如果我傳遞一個值(即object
),它仍然可以工作。
這是C#的一部分嗎? object
和object[]
是否相同?
我問,因為有時我需要傳遞一組對象,有時只需要一個對象,我想知道是否需要這樣做:
public static void MergeRow(object primaryKey, object[] rowValues)
{
MergeRow(new object[]{primaryKey}, rowValues);
}
public static void MergeRow(object[] primaryKey, object[] rowValues)
{
// Rest of my method
還是第一個簽名足夠,並且我可以根據需要傳遞數組或單個對象?
基本上我在問我是否需要重載此方法?
我可以這樣做嗎?
public static void MergeRow(object primaryKey, object[] rowValues)
{
// Rest of my method
並傳入一個object
或object[]
。
(請注意,我正在談論的參數是第一個(primaryKey)。
(注意:我使用primaryKey參數調用的方法是SqlCeResultSet.Seek
,它也帶有一個object[]
)
在某些情況下,您可以接受參數數組,這允許您提供1到n個對象或單個數組。 就像是
public static void MyMethod(params object[] values) { }
問題在於params數組必須是該方法的最后一個參數 。 如果需要在最終參數之前使用單個對象或對象數組,則必須提供類似於原始代碼的重載。 您的代碼看起來像您正在嘗試使用第一個參數,因此您的答案是重載是您的朋友,因為您不能在不使用params關鍵字的情況下傳遞需要對象數組的對象,因此這不是一種選擇除了最后一個參數。
編輯根據其他信息, SqlCeDataReader.Seek
確實將params數組作為其最終參數,因此可以...您可以使用單個對象,多個對象或對象數組來調用它。
這些電話都是合法的
Seek(DbSeekOptions.After, someObject);
Seek(DbSeekOptions.After, someObject, anotherObject);
Seek(DbSeekOptions.After, objectArray);
Seek(DbSeekOptions.After);
是的,您需要重載該方法,因為將單個對象傳遞給接受對象數組的方法會在編譯時產生錯誤。
如果您反過來想要它,它實際上可以工作,您可以這樣做:
public static void MergeRow(object primaryKey, object[] rowValues)
{
if ( primaryKey is object[] )
{
// is an array of objects
}
else
{
// is a single object
}
}
object
和object[]
不相同,因此您通常無法互換它們。 在C#中,沒有任何東西可以在后台進行轉換-您可能會遇到參數數組 ,您之前已經看到過。
在一種特殊情況下,方法調用將接受長度可變的單個對象的列表作為方法的最后一個“參數”,從而允許調用者為方法調用指定任意數量的附加參數。
在可能的情況下,您傳遞的是一個對象,其中函數定義說它需要一個數組。
由於您的函數采用多個數組並傳遞它們,因此,如果您要消除最終用戶必須將其單個對象封裝在數組中,則需要同時提供兩者。
坦白地說,作為API使用者,如果您不考慮單對象重載,我不會感到冒犯;)
如果您僅使用第一個簽名並接受一個object
,則可以傳入object[]
,這樣可以很好地進行編譯。
然而:
object[]
是否為object[]
,並將其與僅作為object
區別對待。 object
參數的方法的人可能不會期望能夠傳遞object[]
。 object[]
是object
而something[]
不是something
。 正如其他人所述,在womp發表文章之后 ,我想指出object和object []是不可互換的,並且您正在經歷的內容已經完全一樣。 SqlCeDataReader.Seek函數定義為:
public bool Seek (
DbSeekOptions dbSeekOptions,
params Object[] index
)
您可以在此處找到有關參數數組的更多信息:
http://msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.