Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 已定义使用相同参数类型c调用的成员_C# - Fatal编程技术网

C# 已定义使用相同参数类型c调用的成员

C# 已定义使用相同参数类型c调用的成员,c#,C#,正如title所说,这个错误已经定义了一个使用相同参数类型c调用的成员 我已经研究了多个相同的问题,但它们都说明了为什么会发生这种情况以及如何处理,将方法名称更改为其他名称,但我不想将方法名称更改为其他名称,因为它是相同的方法,但参数不同,所以我只想绕过它 我有两种方法: public static List<int> Lista(int vrDok) { List<int> list = new List<int>(); using (FbC

正如title所说,这个错误已经定义了一个使用相同参数类型c调用的成员

我已经研究了多个相同的问题,但它们都说明了为什么会发生这种情况以及如何处理,将方法名称更改为其他名称,但我不想将方法名称更改为其他名称,因为它是相同的方法,但参数不同,所以我只想绕过它

我有两种方法:

public static List<int> Lista(int vrDok)
{
    List<int> list = new List<int>();
    using (FbConnection con = new FbConnection(M.Baza.connectionKomercijalno2018))
    {
        con.Open();
        using (FbCommand cmd = new FbCommand("SELECT BRDOK FROM DOKUMENT WHERE VRDOK = @VrDok ORDER BY DATUM ASC", con))
        {
            cmd.Parameters.AddWithValue("@VrDok", vrDok);

            FbDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                list.Add(Convert.ToInt32(dr[0]));
            }
        }
    }
    return list;
}
public static List<int> Lista(int magacinId)
{
    List<int> list = new List<int>();
    using (FbConnection con = new FbConnection(M.Baza.connectionKomercijalno2018))
    {
        con.Open();
        using (FbCommand cmd = new FbCommand("SELECT BRDOK FROM DOKUMENT WHERE MAGACINID = @MID ORDER BY DATUM ASC", con))
        {
            cmd.Parameters.AddWithValue("@MID", magacinId);

            FbDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                list.Add(Convert.ToInt32(dr[0]));
            }
        }
    }
    return list;
}
正如你们所看到的,它们是完全相同的,但参数不同,这会给我带来错误

如何绕过它?

由于方法签名是相同的,因此它会给出错误 -列表绘制 -列表绘制 参数名称并不重要

您可以通过不同的方式解决:
-更改一种方法的名称,例如ListAbyVerdok、ListaByMagicianDavide的任何建议都有效。另一个选项是只使用一个方法,该方法采用ID和参数名,如下所示:

public static List<int> Lista(int id,string paramName)
{
    List<int> list = new List<int>();
    using (FbConnection con = new FbConnection(M.Baza.connectionKomercijalno2018))
    {
        con.Open();
        using (FbCommand cmd = new FbCommand("SELECT BRDOK FROM DOKUMENT WHERE MAGACINID = @MID ORDER BY DATUM ASC", con))
        {
            cmd.Parameters.AddWithValue(paramName, id);

            FbDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                list.Add(Convert.ToInt32(dr[0]));
            }
        }
    }
    return list;
}

因为这两个方法中的所有内容都是相同的,只是参数名称发生了变化。

请尝试从编译器的角度查看。如果我写Lista1,它怎么知道该调用哪个呢?它怎么知道1是magacinId还是vrDoK?这些方法只是在参数名称上有所不同,而不是在参数类型上有所不同。那么最聪明的做法是什么来区别它们呢?ListaByMagacin和ListabyVirdok就是一个例子,但我显然是在混合语言。这与智能与否无关,简单地说,不可能声明两个具有相同名称和签名但参数名称不同的方法。值得注意的是,在第一节中,返回列表是不相关的。你不能有一个只因返回类型不同的方法,所以重要的是Listaint。@Chris IIRC在IL级别上你可以,但在C级别上-实际上你不能编写或使用这样的方法。在一个方法中将int[改为]double并不是一个好方法。这可能是个坏主意。@Enigmativity是的,但这是一个理想选择。很可能最好引入枚举而不是字符串。@Enigmativity是的,这是一个选项。我认为字符串将提供最大的灵活性和较少的更改。是正确的,但升级能力较差。如果数据库中参数的名称被更改,则所有出现的情况都必须更改。@davideizzolato-是的,这是该点的一部分。您必须将数据库和代码视为一个系统,并且必须管理每个系统中的引用。这比希望一些程序员不要意外地输入错误的想法要好。如果你想这样做,你还需要更新sql字符串,以便在where子句中引用正确的参数。更改参数本身的实际名称并没有多大意义——您不妨将其称为@id或其他泛型名称。