Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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# 能否在一条语句中实例化和初始化SqlDataRecord?_C# - Fatal编程技术网

C# 能否在一条语句中实例化和初始化SqlDataRecord?

C# 能否在一条语句中实例化和初始化SqlDataRecord?,c#,C#,在C#中,是否有一种方法可以在一条语句中实例化和初始化SqlDataRecord 而不是在两个语句中执行此操作: var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt)); record.SetInt64(0, someLongVal); 我想用一句话而不是两句话来表达。可能吗 编辑:我现在需要一种简化的b/c方式,这段代码在一个循环中,我想放入Linq语句中。但是,当我将其转换为Linq时,我不喜欢三行lam

在C#中,是否有一种方法可以在一条语句中实例化和初始化SqlDataRecord

而不是在两个语句中执行此操作:

var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt));
record.SetInt64(0, someLongVal);
我想用一句话而不是两句话来表达。可能吗


编辑:我现在需要一种简化的b/c方式,这段代码在一个循环中,我想放入Linq语句中。但是,当我将其转换为Linq时,我不喜欢三行lambda实例化、设置值和返回的外观。所以我在寻找另一种选择。纯粹美学。

您可以使用带有扩展的方法链接

public static class DataRecordExtension
{
    public static SqlDataRecord WithInt64(this SqlDataRecord record, int ordinal, long value)
    {
        record.SetInt64(ordinal, value);
        return record;
    }
}
。。。然后像这样使用它:

var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt)).WithInt64(0, someValue);
或者为你的需要建立一个助手

public class DataRecordHelper
{
    public static SqlDataRecord CreateDataRecordInt64(int ordinal, long value, params SqlMetaData[] metaData)
    {
        var record = new SqlDataRecord(metaData);
        record.SetInt64(ordinal, value);
        return record;
    }
}

您可以使用带有扩展名的方法链接

public static class DataRecordExtension
{
    public static SqlDataRecord WithInt64(this SqlDataRecord record, int ordinal, long value)
    {
        record.SetInt64(ordinal, value);
        return record;
    }
}
。。。然后像这样使用它:

var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt)).WithInt64(0, someValue);
或者为你的需要建立一个助手

public class DataRecordHelper
{
    public static SqlDataRecord CreateDataRecordInt64(int ordinal, long value, params SqlMetaData[] metaData)
    {
        var record = new SqlDataRecord(metaData);
        record.SetInt64(ordinal, value);
        return record;
    }
}

如果希望一个操作执行多个操作,可以创建一个方法来执行这些多个操作。因此,如果需要创建初始化的
SqlDataRecord
的操作,请编写一个创建初始化的
SqlDataRecord
的方法

public static SqlDataRecord CreateDataRecord(long value)
{
    var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt));
    record.SetInt64(0, value);
    return record;
}

如果希望一个操作执行多个操作,可以创建一个方法来执行这些多个操作。因此,如果需要创建初始化的
SqlDataRecord
的操作,请编写一个创建初始化的
SqlDataRecord
的方法

public static SqlDataRecord CreateDataRecord(long value)
{
    var record = new SqlDataRecord(new SqlMetaData("n", SqlDbType.BigInt));
    record.SetInt64(0, value);
    return record;
}

为什么不使用两条语句呢?在我看来,使用一条语句会导致代码可读性降低。为什么不将这两条语句封装到它们自己的例程中,接受
someLongVal
,并输出一条新的SqlDataRecord?也许没有扩展那么酷,但是如果你只是想把调用减少到一行以提高可读性,那么例程就可以工作了。为什么不使用两条语句呢?如果只使用一条语句,代码的可读性就会降低,为什么不将这两条语句封装到它们自己的例程中,接受
someLongVal
,并输出一个新的SqlDataRecord?也许没有扩展那么酷,但如果你只想把调用减少到一行以提高可读性,那么例程就可以工作。如果你只是想创建一个方法,为什么不使用合理设计的方法,编写一个方法来创建和配置
SqlDataRecord
,然后完成它呢?@Steve为什么?问答案的作者,为什么他们会使用一个令人困惑和误导的设计来回答问题,而不是一个更合理的设计来满足问题的要求,这似乎是合理的。对我来说,这既不令人困惑也不误导。至少对我来说,这是一个很好的答案。如果没有本地方法(即不使用扩展),我将在明天之前将其标记为答案。@Servy我认为我的答案不会混淆。方法链接使代码保持干净和可读性。但这只是我的观点:)@Trevor通常,一个方法要么计算一个值,要么执行一个操作。返回值的方法意味着它正在创建一个新的SqlDataRecord,而不仅仅是对提供的记录进行变异,这意味着它是一个
void
方法。如果你只是想创建一个方法,为什么不使用一些合理设计的东西,编写一个方法来创建和配置
SqlDataRecord
并完成它呢?@Steve为什么?问答案的作者,为什么他们会使用一个令人困惑和误导的设计来回答问题,而不是一个更合理的设计来满足问题的要求,这似乎是合理的。对我来说,这既不令人困惑也不误导。至少对我来说,这是一个很好的答案。如果没有本地方法(即不使用扩展),我将在明天之前将其标记为答案。@Servy我认为我的答案不会混淆。方法链接使代码保持干净和可读性。但这只是我的观点:)@Trevor通常,一个方法要么计算一个值,要么执行一个操作。返回一个值的方法意味着它正在创建一个新的SqlDataRecord,而不仅仅是对提供的一个进行变异,因为它是一个
void
方法。