小编Ben*_*jol的帖子

一个实现两个不同IObservable的类?

我有两个事件类,叫他们StatusChangedValueChanged.我想知道将这些'流'暴露为IObservable.正在实施IObservable<Status>IObservable<Value>在同一个班级'坏'?是否可能导致我(或我班级的用户)悲伤?

c# system.reactive

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

使用Subject来解耦Observable订阅和初始化

我有一个暴露IObservable状态的API .但是这种状态取决于必须通过初始化的潜在可观察源Init.

我想做的是保护用户不必按正确的顺序执行操作:就像目前的情况一样,如果他们Status在执行之前尝试订阅,则会Init因为源未初始化而获得异常.

所以我有一个天才的想法,用一个Subject来解耦这两个:订阅我的外部用户Status只是订阅主题,然后当他们调用时Init,我使用我的主题订阅底层服务.

代码中的想法

private ISubject<bool> _StatusSubject = new Subject<bool>();
public IObservable<bool> Status { get { return _StatusSubject; } }

public void Init() 
{
    _Connection = new Connection();
    Underlying.GetDeferredObservable(_Connection).Subscribe(_StatusSubject);
}
Run Code Online (Sandbox Code Playgroud)

但是,通过对虚拟项目的测试,问题是初始化通过订阅主题来"唤醒"我的基础Observable,即使没有人订阅该主题.如果可能的话,这是我想避免的,但我不确定如何......

(我也注意到所接受的智慧,"一般规则是,如果你正在使用一个主题,那么你做错了什么")

c# subject system.reactive

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

使用一个observable作为时钟来测试另一个是否超时

我想做什么的声明如下:

// Checks input source for timeouts, based on the number of elements received 
// from clock since the last one received from source. 
// The two selectors are used to generate output elements.
public static IObservable<R> TimeoutDetector<T1,T2,R>(
        this IObservable<T1> source, 
        IObservable<T2> clock, 
        int countForTimeout,
        Func<R> timedOutSelector, 
        Func<T1, R> okSelector)
Run Code Online (Sandbox Code Playgroud)

ascii中的大理石图很难,但是这里有:

source --o---o--o-o----o-------------------o---
clock  ----x---x---x---x---x---x---x---x---x---
output --^---^--^-^----^-----------!-------^---
Run Code Online (Sandbox Code Playgroud)

我已经尝试寻找Observable可以组合sourceclock以我可以使用的方式的现有函数,但是大多数组合函数依赖于接收"每个"中的一个(And,Zip),或者它们重新返回"之前"的值. "丢失"一个(CombineLatest),或他们是从我需要什么(只是太远Amb,GroupJoin,Join,Merge,SelectMany …

c# system.reactive

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

发布().RefCount()不起作用?

我通过IObservable属性暴露了一个温和的"昂贵"计算.

如果有多个订阅者,我想保护它不被多次运行,所以我在它后面放了一个Publish().RefCount(),但是当我坚持使用断点时,我仍然看到它被调用了两次.

public IObservable<int> Property
{
    get { return _Source.Select(Expensive).Publish().RefCount(); }
}
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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

Enumerable.Unit()函数

在我有一个带有此签名的方法的情况下找到自己

void DoSomething(IEnumerable<T> before, IEnumerable<T> after)
Run Code Online (Sandbox Code Playgroud)

当我只有一个元素而不是IEnumerable时,我发现自己经常不得不调用它.

我想添加三个重载,但是当其中一个参数为null时,这没有用.

所以我想我可以把我的单个元素'封装'在IEnumerable中并发送它,但是我在Enumerable上找不到任何看起来像我想要的东西(也许我看起来不够努力).

所以我正在看这样的事情

    public static IEnumerable<T> EnumerableUnit<T>(T item)
    {
        if(item != null) yield return item;
    }
Run Code Online (Sandbox Code Playgroud)

这是一个好主意吗?或者我应该做些什么?

c# ienumerable

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

为什么GetDirectoryName为C:\返回null?

我刚刚遇到了一个看似奇怪的设计选择:

System.IO.Path.GetDirectoryName(@"C:\folder\file.ext")
Run Code Online (Sandbox Code Playgroud)

返回"C:\ folder"

System.IO.Path.GetDirectoryName(@"C:\") 
Run Code Online (Sandbox Code Playgroud)

返回null.

如果第一个示例返回"文件夹",我可以更好地理解它.

任何想法为什么会这样?当你想获得文件夹路径时,你会怎么做?

.net

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

设计模式:您是否在项目中使用它们?

您如何决定选择哪种设计模式?

我对开发项目的态度始终如一.

  1. 降低业务需求.
  2. 设计数据库.
  3. 决定技术(这个决定几乎总是由客户驱动.)
  4. 开始开发原型.
  5. 获得原型批准.(迭代)
  6. 构建应用程序.
  7. 发布测试.(迭代)
  8. 交出维修.

我不确定设计模式在哪里有用.

architecture design-patterns

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

C#-比较两个CSV文件并给出输出

需要一点帮助,我有两个信息源,该信息通过不同的程序导出到两个不同的CSV文件中。它们应该包含相同的信息,但这是需要检查的信息。

因此,我想做的如下:

  • 从两个文件中获取信息。
  • 比较
  • 输出任何差异以及差异所在的文件。(例如,文件A包含此文件,但文件B没有,反之亦然)。

文件为200,000奇数行,因此需要尽可能有效。

但是,尝试使用Excel进行此操作太复杂了,我真的很难找到一种以编程方式找到方法。

c# csv

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

如何避免在邮件功能中显示HTML标签

我有一个邮件功能,它工作正常,我收到邮件.但问题是我也得到了HTML标签.我的代码如下:

$from=$_REQUEST['id'];  
$to  = 'xyz@abc.com';  

$headers .= 'MIME-Version: 1.0' . "\r\n";  
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

$headers = "From: $from \r\n" .  
    "Reply-To: $from \r\n" .  
    "X-Mailer: PHP/" . phpversion();  

$subject="Contact Mail has received";  

$message=" SOME HTML TAGS ";
Run Code Online (Sandbox Code Playgroud)

邮件正文里面,我有HTML标签,如table,tr,td等等.但是当我收到邮件,我没有得到的表.我得到的所有的HTML标记为table,tr,td.在标题中,我甚至指定了内容类型text/html,但我仍然遇到同样的问题.

我怎么能避免这个?

html php

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

如果Bind是monad的基础,为什么我们不在Linq中使用更多的SelectMany?

如果Bind是monad的基础,为什么我们不在Linq中使用更多的SelectMany?

(抱歉,无法想到添加到问题中的任何有用的东西)

c# linq monads functional-programming

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