小编Rom*_*ier的帖子

说明C#中volatile关键字的用法

我想编写一个程序,它可以直观地说明volatile关键字的行为.理想情况下,它应该是一个程序,它执行对非易失性静态字段的并发访问,并因此而获得不正确的行为.

在同一程序中添加volatile关键字应该可以解决问题.

那是我无法实现的.即使尝试多次,启用优化等,我总是会在没有'volatile'关键字的情况下获得正确的行为.

你对这个话题有什么看法吗?你知道如何在一个简单的演示应用程序中模拟这样的问题吗?它取决于硬件吗?

.net c# volatile

87
推荐指数
3
解决办法
1万
查看次数

命令模式:如何将参数传递给命令?

我的问题与命令模式有关,我们有以下抽象(C#代码):

public interface ICommand
{
    void Execute();
}
Run Code Online (Sandbox Code Playgroud)

让我们来看一个简单的具体命令,它旨在从我们的应用程序中删除一个实体.Person例如,一个实例.

我会有一个DeletePersonCommand实现的ICommand.此命令需要Person删除作为参数,以便在Execute调用方法时将其删除.

管理参数化命令的最佳方法是什么?在执行参数之前如何将参数传递给命令?

c# design-patterns command-pattern

60
推荐指数
8
解决办法
4万
查看次数

来自C#中基数+相对URL的绝对URL

我有一个基本网址:

http://my.server.com/folder/directory/sample
Run Code Online (Sandbox Code Playgroud)

还有一个相对的:

../../other/path
Run Code Online (Sandbox Code Playgroud)

如何从中获取绝对URL?使用字符串操作非常简单,但我想以安全的方式使用Uri类或类似的东西.

它适用于标准的C#应用​​程序,而不是ASP.NET应用程序.

.net c# url path

29
推荐指数
1
解决办法
2万
查看次数

使用SocketAsyncEventArgs时是否可以删除ExecutionContext和Thread分配?

如果您分析使用的简单客户端应用程序SocketAsyncEventArgs,您将注意到ThreadExecutionContext分配.

分配的来源是SocketAsyncEventArgs.StartOperationCommon使用创建ExecutionContext的副本ExecutionContext.CreateCopy().

ExecutionContext.SuppressFlow似乎是抑制这种分配的好方法.但是,此方法本身将在新线程中运行时生成分配.

我该如何避免这些分配?

c# sockets multithreading allocation asyncsocket

29
推荐指数
1
解决办法
875
查看次数

代码合同:为什么有些不变量不在课堂外考虑?

考虑这种不可变类型:

public class Settings
{
    public string Path { get; private set; }

    [ContractInvariantMethod]
    private void ObjectInvariants()
    {
        Contract.Invariant(Path != null);
    }

    public Settings(string path)
    {
        Contract.Requires(path != null);
        Path = path;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里要注意两件事:

  • 有一个合同不变量,确保Path财产永远不会null
  • 构造函数检查path参数值以遵守先前的合约不变量

此时,Setting实例永远不会拥有null Path属性.

现在,看看这种类型:

public class Program
{
    private readonly string _path;

    [ContractInvariantMethod]
    private void ObjectInvariants()
    {
        Contract.Invariant(_path != null);
    }

    public Program(Settings settings)
    {
        Contract.Requires(settings != null);
        _path = settings.Path;
    } // <------ "CodeContracts: …
Run Code Online (Sandbox Code Playgroud)

.net c# design-by-contract static-analysis code-contracts

12
推荐指数
1
解决办法
3108
查看次数

在C#2.0中同步两个IList的最佳算法

想象一下以下类型:

public struct Account
{
    public int Id;
    public double Amount;
}
Run Code Online (Sandbox Code Playgroud)

IList<Account>在C#2.0中同步两个的最佳算法是什么?(没有linq)?

第一个列表(L1)是引用列表,第二个列表(L2)是根据第一个列表同步的列表:

  • 必须从L2中删除L2中不再存在的L2中的所有帐户
  • 必须更新L1中仍存在于L1中的所有帐户(金额属性)
  • 所有在L1中但尚未在L2中的帐户必须添加到L2

ID标识帐户.找到一个天真的工作算法并不难,但我想知道是否有一个智能解决方案来处理这种情况而不会破坏可读性和性能.

编辑:

  • 帐户类型无关紧要,可以是类,具有属性,平等成员等.
  • L1和L2未排序
  • L2项目不能被L1项目替换,必须更新(逐个字段,属性为属性)

.net c# algorithm optimization list

11
推荐指数
1
解决办法
5398
查看次数

Convert.ChangeType的更快版本

在我拥有的应用程序中,Convert.ChangeType为了将值转换为动态加载类型,我正在进行频繁的调用.

然而,在使用ANTS进行分析后,我发现这Convert.ChangeType似乎占用了相当长的一部分时间(由于被频繁调用).有没有人有更快的替代方法呢?

此时我有一个包含目标的类型对象,以及一个string包含该值的对象.

以下是违规代码.我正在考虑在类型上做一个switch语句(因为它是一个有限的类型集合)并调用解析方法,虽然我不确定它是否会更快.

if(attributeRow["Value"]!=DBNull.Value)
    sample[attr] = attr.AttributeType == typeof(Guid)
                 ? new Guid(attributeRow["Value"].ToString())
                 : (IComparable)Convert.ChangeType(attributeRow["Value"],attr.AttributeType);
Run Code Online (Sandbox Code Playgroud)

c#

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

从proto文件生成C#,反之亦然解释自定义选项

我正在使用protobuf-net,我正在尝试:

  1. 从.proto文件生成C#类
  2. 从C#类生成.proto文件

这分别很容易使用:

  1. protogen.exe 工具
  2. Serializer<T>.GetProto() 方法

但问题是我需要支持protobuffer 自定义选项,但它似乎并不像我那样简单.

让我解释:

  1. 从包含应用于消息和字段的自定义选项的proto文件,我想生成一个由.NET自定义属性修饰的C#类.
  2. 在自定义属性修饰的C#类中,我想生成一个proto文件,其中自定义选项应用于消息和字段.

基本上,给出:

message person {
   option (my_message_option) = true;

   optional string firstname = 1 [(my_field_option) = 42];
   optional string lastname = 2 [(my_field_option) = 12];
   optional int age = 3;
}
Run Code Online (Sandbox Code Playgroud)

我想生成:

[ProtoContract, MyMessageOption(true)]
public class Person
{
    [ProtoMember(1), MyFieldOption(42)]
    public string Firstname;

    [ProtoMember(2), MyFieldOption(12)]
    public string Firstname;

    [ProtoMember(3)]
    public string Firstname;
}
Run Code Online (Sandbox Code Playgroud)

......反之亦然.

备注:

  • 自定义选项定义(my_message_optionmy_field_option)已经存在于protofile中(例如,my_custom_options.proto),自定义属性类也可以存在于某个地方(MyMessageOptionAttributeMyFieldOptionAttribute).
  • 我尝试使用protogen.exe和自定义xslt,但protogen似乎不支持自定义选项. …

c# code-generation protocol-buffers protobuf-net

10
推荐指数
1
解决办法
5750
查看次数

.NET - 如何创建一个类,只有一个其他特定的类可以实例化它?

我想要进行以下设置:

class Descriptor
{
    public string Name { get; private set; }
    public IList<Parameter> Parameters { get; private set; } // Set to ReadOnlyCollection

    private Descrtiptor() { }
    public Descriptor GetByName(string Name) { // Magic here, caching, loading, parsing, etc. }
}

class Parameter
{
    public string Name { get; private set; }
    public string Valuie { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

从XML文件加载后,整个结构将是只读的.我想这样做,只有Descriptor类可以实例化一个参数.

一种方法是创建一个IParameter接口,然后Parameter在Descriptor类中使类成为私有,但在实际使用中,Parameter将有几个属性,我想避免重新定义它们两次.

这有点可能吗?

.net c# class access-modifiers c#-3.0

9
推荐指数
1
解决办法
3694
查看次数

ReSharper代码清理/重新格式化代码功能与版本控制系统

ReSharper代码清理功能(启用" 重新排序成员 "和" 重新格式化代码 ")非常棒.使用XML定义布局模板,然后根据您在模板中设置的规则,重新组织整个源文件(或文件夹/项目/解决方案)的简单组合键.

无论如何,你认为这可能是关于VCS的问题,如颠覆,cvs,git等?是否有可能导致许多不良冲突?

谢谢.

c# version-control resharper

8
推荐指数
3
解决办法
5221
查看次数