小编Sup*_*JMN的帖子

如何处理时间耦合?

我因此而苦苦挣扎:

我的类有一些具有时间耦合的方法.这是,一些方法治法,必须先调用为"初始化"的数据的methodB需要正常工作.

我通常通过将违规依赖 作为参数传递给"MethodB"来显式化时间耦合,就像在这个片段中一样:

private class SomeClass
{
    private string field;
    private int count;

    public SomeClass()
    {
        MethodA();
        MethodB(field);
    }

    private void MethodA()
    {
        field = "Something";
    }

    private void MethodB(string str)
    {
        count = str.Length;
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然它使事情明确,但我觉得我做错了.我最终得到了根本不使用字段的方法(静态方法!),所以这个类开始变得不那么紧密了.

这是最好的方法吗?(通过传递参数失去凝聚力)

编辑:关于一些建议使用字段作为构造函数中的参数或使用构建器模式来避免无效状态的答案:我不能这样做,因为在我的情况下我正在构建一个Parser.MethodA读取输入并根据它设置状态(从文件中读取字符),然后调用MethodB.必须以正确的顺序调用它们.这是真正的问题:应该在另一个之前调用一个.

c# oop decoupling

5
推荐指数
2
解决办法
1882
查看次数

使用不同方法名称的接口实现

我有这个界面:

public interface INameScope
{
    void Register(string name, object scopedElement);
    object Find(string name);
    void Unregister(string name);
}
Run Code Online (Sandbox Code Playgroud)

但我希望我的实现具有不同的方法名称.我的实现已经有了一个具有另一种含义的Register方法.

是不是有一种方法可以使实现的方法具有"RegisterName","FindName"或"UnregisterName"等名称,而不必使用相同的名称?

.net c# oop

5
推荐指数
2
解决办法
1983
查看次数

ReactiveUI,WPF和验证

我已经看到ReactiveUI过去具有验证功能。当前,在6.5版中,我找不到与之相关的任何内容。

您是否知道使用ReactiveUI在WPF中有或多或少的官方方式来处理验证任务?

.net c# validation wpf reactiveui

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

父节点内列表的序列化(集合扁平化)

我必须生成这样的 XML 结构(使用 .NET 序列化):

<Person>
   <Name>John</John>
   <Address>Address1</Address>
   <Address>Address2</Address>
   <Address>Address3</Address>
</Person>
Run Code Online (Sandbox Code Playgroud)

目前,我有一个class Person名为 a 的List<string> Addresses内部。

我认为XmlSerializer默认情况下会创建一个<Addresses>节点,将每个地址作为子元素,所以我会得到:

<Person>
   <Name>John</John>
   <Addresses>           
      <Address>Address1</Address>
      <Address>Address2</Address>
      <Address>Address3</Address>
   </Addresses>
</Person>
Run Code Online (Sandbox Code Playgroud)

不是我需要的。

我的问题是,是否可以将里面的所有地址扁平化<Person>

.net c# xml collections serialization

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

在XAML内定义一个集合

我想创建一个绑定到XAML内部定义的字符串的集合。

在WPF中,我可以创建一个ArrayList带有键的资源,准备用作绑定的源(使用StaticResource)。

Xamarin形式有可能吗?

编辑:我已经尝试使用@Stephane Delcroix提出的解决方案来使用此XAML,但是却遇到了未处理的异常:

<?xml version="1.0" encoding="utf-8"?>

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:sys="clr-namespace:System;assembly=mscorlib"
             x:Class="ReferenceApp.Views.GamesPage"
             Title="Games">


    <ContentPage.Resources>
        <x:Array Type="{x:Type sys:String}" x:Key="array">
            <x:String>Hello</x:String>
            <x:String>World</x:String>
        </x:Array>
    </ContentPage.Resources>
    <Grid />

</ContentPage>
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除了 <x:Array >... </x:Array>

我究竟做错了什么?

xaml markup-extensions xamarin.forms

5
推荐指数
2
解决办法
3021
查看次数

将最后一项推送到 Observable(序列)

我有一个IObservable<Item>内部类,我想公开一个只读属性,该属性提供在给定时间推送到 observable 的最后一个项目。因此它将提供 的单个值Item

如果没有推送任何值,那么它将必须返回一个默认值。

如何在不必订阅可观察对象并拥有“支持字段”的情况下执行此操作?

.net c# system.reactive rx.net

5
推荐指数
2
解决办法
1483
查看次数

DataTemplate 中的 TemplateBinding 不起作用

我正在创建一个模板控件我的通用 Windows 应用程序中。

问题是,在<Button Content="{Binding}" Command="{TemplateBinding AddCharCommand}" />TemplateBinding不起作用。

似乎问题是因为它是在一个 DataTemplate.

这是Style应用到我的控件的模板。

<Style TargetType="local:CoordinatesControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:CoordinatesControl">

                <ListView ItemsSource="{TemplateBinding Numbers}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Button Content="{Binding}"
                                    Command="{TemplateBinding AddCharCommand}" />
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

.net xaml uwp windows-10-universal

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

可观察管道中的异常处理

我创建了一个 observable,它由一个项目通过运行异步方法转换为另一个项目组成。

IObservable<Summary> obs = scanner.Scans
                    .SelectMany(b => GetAssignment(b))
                    .SelectMany(b => VerifyAssignment(b))
                    .SelectMany(b => ConfirmAssignmentData(b))
                    .SelectMany(b => UploadAsset(b))
                    .Select(assignment => new Summary())
                    .Catch(LogException());
Run Code Online (Sandbox Code Playgroud)

我想让这个防故障,所以如果在处理过程中抛出异常,我应该记录异常,但忽略异常并继续下一次扫描(由 推送的下一个项目scanner.Scans

当前代码捕获任何异常,但一旦抛出异常,序列就会结束。

我怎样才能让它“吞下”异常(记录它),但要继续下一个项目?

.net c# error-handling reactive-programming system.reactive

5
推荐指数
0
解决办法
86
查看次数

包装速率限制API调用

我有一个API调用,它接受每秒最大调用率.如果超过速率,则抛出异常.

我想把这个调用包装成一个抽象,它可以使调用率保持在极限之下.它将像网络路由器一样:处理多个呼叫并将结果返回给正确的呼叫者,关注呼叫率.目标是使调用代码尽可能不知道该限制.否则,具有此调用的代码中的每个部分都必须包装到try-catch中!

例如:想象一下,您可以从可以添加2个数字的extern API调用方法.此API可以每秒调用5次.高于此值的任何内容都将导致异常.

为了说明问题,限制通话费率的外部服务就像这个问题的答案中的那个

如何使用Observables构建速率限制API?

附加信息:

由于每次从代码的任何部分调用此方法时都不希望担心该限制,因此您可以考虑设计一个可以调用的包装器方法,而不必担心速率限制.在内部你关心限制,但在外面你暴露了一个简单的异步方法.

它类似于Web服务器.它如何将正确的结果包返回给正确的客户?

多个呼叫者将调用此方法,他们将在结果出现时获得结果.这种抽象应该像代理一样.

我怎么能这样做?

我确信包装方法的公司应该是这样的

public async Task<Results> MyMethod()
Run Code Online (Sandbox Code Playgroud)

在方法内部,它将执行逻辑,可能使用Reactive Extensions(Buffer).我不知道.

但是怎么样?我的意思是,多次调用此方法应该将结果返回给正确的调用者.这甚至可能吗?

非常感谢!

.net c# concurrency asynchronous system.reactive

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

UWP中的自定义MarkupExtension

我想创建自己的MarkupExtension(例如BindingTemplateBinding...)

如何像在WPF中一样为通用应用程序做到这一点?

.net c# xaml markup-extensions uwp

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