首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >object vs object[]

object vs object[]
EN

Stack Overflow用户
提问于 2010-07-03 06:21:52
回答 5查看 224关注 0票数 2

我正在研究一个接受object[]参数的方法。但是如果我传入一个值(即一个object),它仍然可以工作。

这是作为C#的一部分内置的吗?objectobject[]是一样的吗?

我这样问,因为有时我需要传入一个对象数组,而有时我只需要一个对象,我想知道我是否需要这样做:

代码语言:javascript
复制
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

或者第一个签名就足够了,我可以随心所欲地传入一个数组或一个对象?

基本上我是在问,我需要重载这个方法吗?

我可以这样做吗:

代码语言:javascript
复制
public static void MergeRow(object primaryKey, object[] rowValues)
{
    // Rest of my method

并传入objectobject[]

(请注意,我正在谈论的参数是第一个参数(primaryKey)。

(注意:我使用primaryKey参数调用的方法是SqlCeResultSet.Seek,它也接受一个object[])

EN

回答 5

Stack Overflow用户

发布于 2010-07-03 06:24:49

在某些情况下,您可以接受参数数组,这允许您提供1到n个对象或单个数组。就像这样

代码语言:javascript
复制
public static void MyMethod(params object[] values) { }

问题是params数组必须是该方法的最后一个参数。如果您需要在最后一个参数之前使用单个对象或对象数组,则必须像原始代码一样提供重载。您的代码看起来像是在尝试使用第一个参数,所以您的答案是重载是您的朋友,因为如果不使用params关键字,就不能传入需要对象数组的对象,而且除了最后一个参数之外,这不是一个选项。

编辑参数基于附加信息,SqlCeDataReader.Seek确实采用参数数组作为其最终参数,所以是的……您可以使用单个对象、多个对象或对象数组来调用它。

这些通话都是合法的

代码语言:javascript
复制
Seek(DbSeekOptions.After, someObject);
Seek(DbSeekOptions.After, someObject, anotherObject);
Seek(DbSeekOptions.After, objectArray);
Seek(DbSeekOptions.After);
票数 3
EN

Stack Overflow用户

发布于 2010-07-03 06:31:00

是的,您需要重载该方法,因为将单个对象传递给接受对象数组的方法将在编译时产生错误。

编辑

如果你想反其道而行之,它实际上是有效的,你可以这样做:

代码语言:javascript
复制
public static void MergeRow(object primaryKey, object[] rowValues)
{
    if ( primaryKey is object[] )
    {
        // is an array of objects
    }
    else
    {
        // is a single object
    }
}
票数 1
EN

Stack Overflow用户

发布于 2010-07-03 06:31:52

objectobject[]是不同的,您通常不能将它们互换。在C#中没有任何东西会在幕后改变它们--您可能会遇到以前见过这种情况的parameter arrays

这是一种特殊情况,在这种情况下,方法调用将接受长度可变的单个对象列表作为方法的最后一个“参数”,允许调用者为方法调用指定任意数量的附加参数。

这些情况很可能是当你传递一个对象时,函数定义说明它需要一个数组。

由于您的函数接受多个数组并传递它们,因此如果您希望最终用户不必将其单个对象封装在一个数组中,那么您需要同时提供这两个对象。

不过,老实说,作为一个API使用者,如果您忽略了单对象重载,我不会生气;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3169433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档