小编Luc*_*key的帖子

.out 4.0中的Timeout.InfiniteTimespan?

我确实知道Timeout.InfiniteTimespan.NET 4.0中不存在.

注意到,Timeout.Infinite.NET 4.0中也存在这种情况

我叫这两种方法:

// the Change-Method
public bool Change(
    TimeSpan dueTime,
    TimeSpan period
)

// the Constructor of Timer
public Timer(
    TimerCallback callback,
    Object state,
    TimeSpan dueTime,
    TimeSpan period
)
Run Code Online (Sandbox Code Playgroud)

在某些情况下,dueTimeParameter必须是无限的,这意味着不会触发Event.我知道我可以简单地使用其他重载,但我觉得必须要更简单.

我已经尝试过使用new TimeSpan(0, 0, -1)new TimeSpan(-1)作为dueTime.*但是这会引发ArgumentOutOfRangeException指向dueTime参数.

是否有可能创建一个像Timeout.InfiniteTimespan.NET 4.5 一样的文字?

.net c# timer .net-4.0 .net-4.5

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

什么时候使用Duck Typing?

我现在已经阅读了很多关于Duck Typing的内容,我似乎理解了这个概念.

我不明白的是,在什么情况下,放弃强大的典型编程的好处对于Duck Typing的好处是有效的.在什么情况下会使用Duck Typing而不是Interfaces和Inheritance?

我的意思是,如果你无论如何需要确保传递给Method的对象实现某些方法,为什么我不应该简单地定义一个接口?

为了清楚起见,我知道Duck Typing是如何工作的.我想知道何时使用它真的很有意义.

澄清:

在哪种情况下你会使用

public bool MyMethod(dynamic obj)
Run Code Online (Sandbox Code Playgroud)

代替

public bool MyMethod(ISomeInterface obj)
//or
public bool MyMethod(SomeBaseClass obj)
Run Code Online (Sandbox Code Playgroud)

c# duck-typing

8
推荐指数
1
解决办法
1382
查看次数

如何为 razor 文件编写 DiagnosticAnalyzer?

我的目标

我的团队决定,他们希望采用自动化来强制执行 .razor 文件中的编码指南。由于我们已经在使用 StyleCopAnalyzers,我可能会实现我们自己的分析器来实现此目标。

例子

为了更好地让您理解我的想法,请考虑以下示例。

令以下为有效代码:

<MyGrid>
    <MyItem></MyItem>
    <MyItem></MyItem>
    <MyItem></MyItem>
</MyGrid>
Run Code Online (Sandbox Code Playgroud)

现在,如果有人不封装<MyItem><MyGrid>,分析器会报告类似MyItemshould be direct child of a MyGrid的诊断信息。


我尝试过的

首先,我遵循了微软的教程:编写你的第一个分析器和代码修复。这非常有效。

但是,我的下一步是使用默认模板创建示例 Blazor WASM 应用程序。当我在示例 Blazor 应用程序上执行时MakeConstAnalyzer,我会得到以下行为。

修改Program.cs如下:

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("#app");

        // I get squiggly lines here with the expected analyzer message from the MakeConstAnalyzer
        int bla = 0; …
Run Code Online (Sandbox Code Playgroud)

c# razor roslyn-code-analysis

7
推荐指数
0
解决办法
602
查看次数

如何在保持Designer满意的同时将依赖注入应用于UserControl视图?

public class StatisticsViewPresenter
{
    private IStatisticsView view;
    private Statistics statsModel;

    public StatisticsViewPresenter(IStatisticsView view, Statistics statsModel)
    {
        this.view = view;
        this.statsModel = statsModel;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不使用事件(但我愿意,如果它可以解决我的问题),所以我的View类看起来像这样:

public class StatisticsForm : Form, IStatisticsView
{
    public StatisticsForm()
    {
        InitializeComponent();
    }

    [Inject]
    public StatisticsViewPresenter Presenter
    {
        private get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

kernel.Bind<StatisticsPresenter>().ToSelf().InSingletonScope();
kernel.Bind<IStatisticsView>().To<StatisticsForm>();
kernel.Get<IStatisticsView>();
Run Code Online (Sandbox Code Playgroud)

它构建表单,构建演示者,然后将演示者注入Presenter属性.一切都很好看.(除了那个单例范围的演示者 - 有关更好的方法的任何想法吗?也许只是手动将演示者注入到演示者的构造函数中的视图的Presenter属性中:this.view.Presenter = this).

但是如果我将StatisticsForm转换为StatisticsUserControl并将其拖放到我的MainForm上,它就不会被Ninject注入到MainForm中,它只是由Designer新设计的.我在这看到三个解决方案:

1)不要使用UserControls,只使用一个实现这些多视图的巨型表单(eww);

2)将UserControls注入我的表单并失去Designer支持;

3)你的解决方案!:)

c# user-controls dependency-injection ninject windows-forms-designer

6
推荐指数
1
解决办法
1913
查看次数

有没有一种简单的方法可以在C#中堆叠比较运算符?

在c#中,任何实现比较运算符的类型(例如< >)都可以轻松进行比较。例如,我可以这样做:

var date1 = new DateTime(1000);
var date2 = new DateTime(2000);
var date3 = new DateTime(3000);
var result = date1 < date2; // true
Run Code Online (Sandbox Code Playgroud)

但是,我无法执行以下操作

var result = date1 < date2 < date3; // error
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为第一个比较返回的是布尔值,该布尔值无法与其他日期进一步比较

所以我必须像这样做(DateTime.CompareTo(DateTime)如果first DateTime早一点则返回-1 :

var result = date1.CompareTo(date2) + date2.CompareTo(date3) == -2; // true
Run Code Online (Sandbox Code Playgroud)

或简单地做到这一点:

var result = date1 < date2 && date2 < date3; // true
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有可能<多次链接操作员,以便在更复杂的场景中使用时易于编写一些易于阅读的代码。

例如,我需要这样做(当然不会编译):

result = 
    date1 < date2 < date3 < …
Run Code Online (Sandbox Code Playgroud)

c# comparison

6
推荐指数
1
解决办法
70
查看次数

测试失败后如何执行代码

我正在为图书馆创建单元测试.这个库连接到数据源然后我正在做一些测试Stuff之后数据源将被断开连接.

如果其中一个测试失败,则方法终止,我无法执行断开连接功能.

这是一个样本,以说明以上描述:

[TestMethod]
public void Test()
{
    var datasourceObject = new DatasourceObject("location-string");
    datasourceObject.Connect();

    // Do some Stuff with Asserts

    datasourceObject.Disconnect(); // must be executed
}
Run Code Online (Sandbox Code Playgroud)

有没有最好的实践呢?

c# unit-testing mstest vs-unit-testing-framework

5
推荐指数
1
解决办法
1969
查看次数

c#wpf Multibindings不可用

我想做的很简单.我有一个窗口,我希望标题绑定到两个不同的属性.每当其中一个属性更改时,都应更新标题.

我先尝试过但没有工作

<Window x:Class="MyNamespace.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="{Binding Path=Clientname} {Binding Path=LoadedConfiguration}" 
Run Code Online (Sandbox Code Playgroud)

那么我在这里这里阅读有关Multibindings的内容.并尝试了它的使用,这实际上也不起作用

<Window x:Class="MyNamespace.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Window.Title>
    <Multibinding StringFormat="{}{0} + {1}">
        <Binding Path="Clientname" />
        <Binding Path="LoadedConfiguration" />
    </Multibinding>
</Window.Title>
Run Code Online (Sandbox Code Playgroud)

错误是在WPF项目中不支持Multibinding,我认为没有任何意义.

所以,我猜测的是缺少xmlns或缺少.dll.我发现Multibindings在"PresentationFramework.dll"里面,我已经引用了它.根据msdn,你需要http://schemas.microsoft.com/winfx/2006/xaml/presentationhttp://schemas.microsoft.com/netfx/2007/xaml/presentation来包含,我做了.

在这里,我可能实际上没有得到任何进一步,我希望你得到.

c# wpf binding multibinding

4
推荐指数
1
解决办法
1610
查看次数

我怎样才能有条件输出参数

该方法DoSomething()确实创建了一个实例,MyClass但不是每个人都想知道,MyClass-Object如果您只是知道该操作是否成功,它有时也适合.

这不编译

public bool DoSomething(out Myclass myclass = null)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

ref或out参数不能具有默认值

当然我可以简单地删除out-Keyword但后来我需要先分配任何变量,这不是我的意图.

这可能是一种解决方法,但我希望bool成为返回类型

public Myclass DoSomething() //returns null if not successful
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

有谁知道一个很好的解决方法吗?

c#

4
推荐指数
2
解决办法
526
查看次数

由于反映安全问题,是否访问私有字段和属性?

我刚刚在这里发现,由于反射,可以(至少在c#中)查找私有字段和属性.

我很惊讶,虽然我知道像DataContractSerializer类这样的构造需要访问它们的可能性.

现在的问题是,如果有人可以访问我班级的每个领域,这有点不安全,不是吗?我的意思是如果有人有一个private bool _isLicensed领域.它可以很容易地改变!

后来我在这里发现,字段访问器并不是一种安全机制.

那么如何让我的应用程序安全,这意味着我如何阻止除我以外的任何人改变我的类中的基本状态值?

.net c# security reflection

4
推荐指数
2
解决办法
429
查看次数

控制生命周期 - 序列图 - 企业架构师

我以前使用Visual Paradigm进行建模.在那里,我有很多可能来控制我的物体的生命周期.

我的意思正是虚线数组象征着一个物体的创造和生命线末端的十字架,象征着物体已经完成.

我做了一些研究,根据这个网页,EA以某种方式做了这个支持.在下面的图片中(在链接中找到),注意如何创建和完成":Cart Item".我怎么做?

在此输入图像描述

uml modeling enterprise-architect

4
推荐指数
1
解决办法
2041
查看次数