小编sta*_*ica的帖子

C#'out'参数有用的真实示例?

我正在阅读核心C#编程结构,并且很难将我的头部包裹在out参数修饰符周围.我知道通过阅读它做了什么,但我想在使用它的时候想到一个场景.

有人可以给我一个真实世界的例子吗?谢谢.

c# out-parameters

17
推荐指数
3
解决办法
2万
查看次数

值类型何时包含引用类型?

我理解,在引用类型上使用值类型的决定应该基于语义,而不是性能.我不明白为什么值类型可以合法地包含引用类型成员?这有几个原因:

首先,我们不应该构建一个需要构造函数的结构.

public struct MyStruct
{
    public Person p;
    // public Person p = new Person(); // error: cannot have instance field initializers in structs

    MyStruct(Person p)
    {
        p = new Person();
    }
}
Run Code Online (Sandbox Code Playgroud)

其次,由于值类型语义:

MyStruct someVariable;
someVariable.p.Age = 2; // NullReferenceException
Run Code Online (Sandbox Code Playgroud)

编译器不允许我Person在声明中初始化.我必须把它移到构造函数,依赖调用者,或期望一个NullReferenceException.这些情况都不是理想的.

.NET Framework是否在值类型中有任何引用类型的示例?我们什么时候应该这样做(如果有的话)?

c# value-type reference-type

17
推荐指数
1
解决办法
1414
查看次数

CIL的"错误"条款与C#中的"catch"条款有何不同?

根据CLI标准(分区IIA,第19章)和System.Reflection.ExceptionHandlingClauseOptions枚举的MSDN参考页面,有四种不同的异常处理程序块:

  • catch子句:"捕获指定类型的所有对象."
  • filter子句:"仅在过滤器成功时输入处理程序".
  • 最后条款:"处理所有异常和正常退出."
  • fault子句:"处理所有异常,但不能正常退出."

鉴于这些简短的解释(引自CLI标准,顺便说一句),这些应该映射到C#,如下所示:

  • 抓住 -catch (FooException) { … }
  • 过滤器 - 在C#中不可用(但在VB.NET中Catch FooException When booleanExpression)
  • 终于 -finally { … }
  • 错误 -catch { … }

实验:

一个简单的实验表明,这种映射不是.NET的C#编译器真正做的事情:

// using System.Linq;
// using System.Reflection;

static bool IsCatchWithoutTypeSpecificationEmittedAsFaultClause()
{
    try
    {
        return MethodBase
               .GetCurrentMethod()
               .GetMethodBody()
               .ExceptionHandlingClauses
               .Any(clause => clause.Flags == ExceptionHandlingClauseOptions.Fault);
    }
    catch // <-- this is what the above code …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling system.reflection

17
推荐指数
4
解决办法
2235
查看次数

如何将`where T:U`泛型类型参数约束从C#转换为F#?

F#给我带来了类型推理规则的一些麻烦.我正在编写一个简单的计算构建器,但无法使我的泛型类型变量约束正确.


我想要的代码在C#中如下所示:

class FinallyBuilder<TZ>
{
    readonly Action<TZ> finallyAction;

    public FinallyBuilder(Action<TZ> finallyAction)
    {
        this.finallyAction = finallyAction;
    }

    public TB Bind<TA, TB>(TA x, Func<TA, TB> cont)  where TA : TZ
    {                                      //        ^^^^^^^^^^^^^
        try                                // this is what gives me a headache
        {                                  //      in the F# version
            return cont(x);
        }
        finally
        {
            finallyAction(x);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我为F#版本提出的最佳(但非编译代码)是:

type FinallyBuilder<?z> (finallyAction : ?z -> unit) =

    member this.Bind (x : ?a) (cont : ?a -> ?b) =
        try …
Run Code Online (Sandbox Code Playgroud)

c# generics f# type-constraints computation-expression

16
推荐指数
1
解决办法
1035
查看次数

如何查找包含序列的所有元素的最小长度子序列

给定一个序列,如S = {1,8,2,1,4,1,2,9,1,8,4},我需要找到包含S的所有元素的最小长度子序列(没有重复,顺序无所谓).如何以有效的方式找到这个子序列?

注意: S中有5个不同的元素:{1,2,4,8,9}.最小长度子序列必须包含所有这5个元素.

algorithm

16
推荐指数
1
解决办法
7417
查看次数

如果左操作数到?? operator不为null,是否对右操作数进行求值?

我正在考虑??在C#中使用运算符(null-coalescing operator).但是MSDN上的文档是有限的.

我的问题:如果左侧操作数不为null,右手操作数是否会被评估?

.net c# operators

16
推荐指数
2
解决办法
1929
查看次数

SQL连接错误:System.Data.SqlClient.SqlException(0x80131904)

我在几种情况下看到这种情况,并且在基于Web的应用程序连接到SQL 2008 R2服务后端时是间歇性的.用户正在进行点2点连接,并且可以打开和关闭此功能.我认为这是带宽问题,直到我开始在与这个SQL服务器位于同一核心交换机上的终端服务器上看到它.我已经检查了远程连接已启用,在TCP/IP配置中正确设置了端口1433,我看到的唯一原因是远程连接中的超时设置设置为100000而不是无限制.

错误是

System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接) --->

System.ComponentModel.Win32Exception(0x80004005):找不到网络路径 at

System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection, Action`1 wrapCloseInAction) at
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at
System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo,
SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout,
Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean
integratedSecurity, Boolean withFailover) at
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo
serverInfo, String newPassword, SecureString newSecurePassword,
Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean
withFailover) at
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo
serverInfo, String newPassword, SecureString newSecurePassword,
Boolean redirectedUserInstance, SqlConnectionString connectionOptions,
SqlCredential credential, TimeoutTimer timeout) at …
Run Code Online (Sandbox Code Playgroud)

.net sql-server named-pipes sql-server-2008

16
推荐指数
1
解决办法
15万
查看次数

mapState与setter

我想通过分配setter方法mapState.我目前使用一种解决方法,我将我感兴趣的变量命名为(todo)作为临时名称(storetodo),然后在另一个计算变量中引用它todo.

methods: {
    ...mapMutations([
        'clearTodo',
        'updateTodo'
    ])
},
computed: {
    ...mapState({
        storetodo: state => state.todos.todo
    }),
    todo: {
        get () { return this.storetodo},
        set (value) { this.updateTodo(value) }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想跳过额外的步骤并直接在其中定义getter,setter mapState.

我为什么要这样做?

正常的方法是使用mapMutations/ mapActions&mapState/ mapGetters 没有我上面说明的计算的get/set组合,并直接在HTML中引用变异:

<input v-model='todo' v-on:keyup.stop='updateTodo($event.target.value)' />
Run Code Online (Sandbox Code Playgroud)

getter/setter版本允许我简单地写:

<input v-model='todo' />
Run Code Online (Sandbox Code Playgroud)

vue.js vuex

16
推荐指数
2
解决办法
9216
查看次数

如何在DataGridView中禁用新行的创建?

这是关于用C#编写的.NET Windows Forms应用程序.我有一个DataGridView连接到数据库.它显示所选表的内容.

现在如果该表中有4行,它将显示4行.在此之后我能够进入5 在DataGrid视图列.应该避免.现在我必须禁用新行的创建.我该怎么做?

c# datagridview winforms

15
推荐指数
2
解决办法
3万
查看次数

将Structs与WCF服务一起使用

有没有关于使用结构作为WCF服务的返回类型的官方建议?

我目前正在与一项我没有写过的服务进行互动,并发现自己受到启发,要求查看我的烦恼是否合理.

我过去总是使用类 - 可能部分是因为这是样本总是显示的,但正如我现在想的那样,出于其他"直观"的原因:

  • 我通过定义一个单独的项目来开始合同样式,该项目的接口表示服务来回传递的类型.

  • 我使用LINQ很多,因此对于可空性的测试是隐含的引用类型,而对于结构和其他值类型,我总是需要标记为可空.

虽然我承认它比我脑子里的项目符号列表更直观,但有些东西会马上来找我.我想问这个问题,因为我正在处理一个返回结构的服务,并且在处理返回值时必须写:

var foo = Bar.Value.MyField;
Run Code Online (Sandbox Code Playgroud)

代替

var foo = Bar.Value;
Run Code Online (Sandbox Code Playgroud)

c# wcf struct value-type

14
推荐指数
1
解决办法
8258
查看次数