小编Yog*_*esh的帖子

C#Regex.Split:删除空结果

我正在开发一个导入数千行的应用程序,其中每行都有这样的格式:

|* 9070183020  |04.02.2011    |107222     |M/S SUNNY MEDICOS                  |GHAZIABAD                          |      32,768.00 |
Run Code Online (Sandbox Code Playgroud)

我使用以下内容Regex将行拆分为我需要的数据:

Regex lineSplitter = new Regex(@"(?:^\|\*|\|)\s*(.*?)\s+(?=\|)");
string[] columns = lineSplitter.Split(data);

foreach (string c in columns)
    Console.Write("[" + c + "] ");
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果:

[] [9070183020] [] [04.02.2011] [] [107222] [] [M/S SUNNY MEDICOS] [] [GHAZIABAD] [] [32,768.00] [|]
Run Code Online (Sandbox Code Playgroud)

现在我有两个问题.
1.如何删除空结果.我知道我可以用:

string[] columns = lineSplitter.Split(data).Where(s => !string.IsNullOrEmpty(s)).ToArray();
Run Code Online (Sandbox Code Playgroud)

但有没有内置的方法来删除空结果?

2.如何拆除最后一根管子?

谢谢你的帮助.
此致,
Yogesh.

编辑:
我认为我的问题有点误解.从来没有关于我如何做到这一点.这只是关于如何通过更改Regex上面的代码来实现它.

我知道我可以在很多方面做到这一点.我已经使用上面提到的代码和一个Where子句以及另一种方式(也是两倍以上)更快地完成了它:

Regex regex = new …
Run Code Online (Sandbox Code Playgroud)

c# regex split

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

使用Entity Framework 4和Code-First从数据库中排除字段/属性

我想知道有没有办法从数据库中排除一些字段?例如:

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string FatherName { get; set; }

    public bool IsMale { get; set; }
    public bool IsMarried { get; set; }

    public string AddressAs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何从数据库中排除AddressAs字段?

.net c# poco entity-framework-4 ef-code-first

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

CLR 2.0和CLR 4.0之间的区别

我已经阅读了无数关于C#4.0新功能的博客,帖子和StackOverflow问题.即使是新的WPF 4.0功能也已经开始公开.我找不到并想知道的事情:

  1. 从C#/ WPF开发人员的角度来看,CLR 4.0的主要变化是什么?
  2. CLR 4.0作为一个整体有哪些重大变化?

我认为,在内部,大多数更改都是针对新的动态语言和并行编程.但是还有其他重大改进吗?因为语言改进只是语言的改进.您只需要新的编译器,除了版本1.0/1.1(至少大部分都可以使用)之外,这些功能可以与较低版本的.Net一起使用.

如果以上功能是唯一的,只有这些功能版本更改为4.0,我认为是4.0,因为基于.Net 4.0版本(即1.0/1.1,2.0和3.0/3.5之后).版本增量是否合理?

编辑:

正如Pavel Minaev在评论中指出的那样,即使这两个特征也是CLR独立的.3.0和3.5也有速度和其他改进.那么为什么版本会增加?

clr .net-4.0 c#-4.0

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

在我的GoDaddy共享主机帐户中安装subversion存储库

我是一个从事许多.Net项目的独立程序员.我独自工作,直到现在我还没有使用版本控制.就在最近,我了解了使用版本控制的好处.因为我有三台机器,所以保持项目的同步版本有时会被证明是太多了.所以,现在我打算使用subversion作为我的版本控制服务器.

话虽如此,我在许多主题,博客等中读到了关于为单个开发人员使用版本控制的好处.我同意他们中的大多数,但他们大多数没有讨论的一件事是,如何使用SVN而不实际依赖于您的某个特定系统作为服务器.我想这样做的原因是因为我的所有系统几乎都没有处于"永远在线"状态.因此,如果我在我的主桌面上托管我的存储库,如果我的桌面关闭(或者我在这里丢失了什么东西,我可能无法在我的笔记本电脑上工作)

这就是为什么,我想知道我可以在我的GoDaddy共享主机帐户中托管我的subversion存储库并从我拥有的三台计算机访问它们吗?

或者,我可以使用任何免费(和快速)的在线svn存储库吗?我现在尝试不使用任何gui客户端,因为我想先用svn清除我的基础知识,但后来我打算使用TortoiseSVN作为我的客户端.

svn tortoisesvn online-repository

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

MEF:使用CreationPolicy.NonShared时,将不同的构造函数参数传递给零件

我知道有很多关于使用MEF的构造函数参数注入的问题,但我的有点不同.

我想知道,有没有什么办法,以不同的参数值传递给当我使用的组合部分的构造PartCreationPolicy(CreationPolicy.NonShared)GetExportedValue

例如:

[PartCreationPolicy(CreationPolicy.NonShared)]
[Export]
public partial class Foo
{
    [ImportingConstructor]
    public Foo([Import("SomeParam")]object parameter)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

和其他地方......

container.ComposeExportedValue("SomeParam", "Some value...");
var instance = container.GetExportedValue<Foo>();
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我只能使用ComposeExportedValue一次,因为第二次运行会导致a ChangeRejectedException.

所以,我的问题是:

  1. SomeParam对于每个新实例,还有其他方法可以更改上述场景中的值吗?
  2. 如果没有,在不使用任何其他DI框架的情况下,可以实现的其他方法是什么?我想到的一件事是创建一个服务来暴露一些东西,比如System.Collections.Concurrent.ConcurrentQueue我在调用之前将参数值排入队列GetExportedValue,然后在部件的构造函数中将值取列.但这是一个黑客攻击,也会产生比它解决的问题更多的问题.
  3. 如果以上两个问题的答案都是否定的,那么有没有其他方法可以通过MEF和其他DI/IOC框架的组合实现这一目标?

谢谢你的帮助.:)
问候,
Yogesh Jagota

c# dependency-injection mef inversion-of-control

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

在特定时间后执行动作,但如果是手动调用,则重置计时器

我正在使用System.Timers.Timer每 10 秒执行一次操作。如果出现某些特殊情况或通过 UI,也可以通过其他方法调用此操作。如果没有从计时器调用该操作,我只需重置计时器。

我正在使用的代码...

timer = new Timer();
timer.Elapsed += (sender, args) => ExecuteAction();
timer.Interval = 10000;
timer.Enabled = true;

public void ExecuteActionAndResetTimer()
{
    ExecuteAction();

    timer.Stop();
    timer.Start();
}

private void ExecuteAction()
{
    // do the work...
}
Run Code Online (Sandbox Code Playgroud)

预期的结果,如果“X”是从计时器(即,所谓的动作ExecuteAction),“ X ”从外部计时器(即所谓的动作ExecuteActionAndResetTimer)和“o”是第二:

XooooXo X o X ooooXo X ooooX

这工作正常。我只想知道我们可以使用反应式扩展来做到这一点吗?

谢谢。

c# timer system.reactive reactive

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

带有Task.Delay的Observable.Timer或TPL

我有一个要求,在10秒的初始延迟之后,我需要SomeMethod每10分钟执行一次,但是在完成之后应该启动10分钟计时器SomeMethod.这是一个粗略的例子:

Start Task 00:00:00
(10 second delay)
SomeMethod executed at 00:00:10 (takes 15 minutes)
(10 minute delay)
SomeMethod executed at 00:25:10 
... and so on.
Run Code Online (Sandbox Code Playgroud)

我知道如何使用TPL来做到这一点.我可以使用Task.Delay启动任务并执行SomeMethod,然后在每次完成(ContinueWith TaskStatus.RanToCompletion)之后,我创建一个新任务并SomeMethod再次执行.

我的问题是,这有可能使用Observable.Timer吗?就像是...

Observable.Timer(TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(10))
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是,如果SomeMethod需要15分钟,我将SomeMethod运行两个不同的实例,这是我不想要的.我希望10分钟计时器 SomeMethod完成启动.这可能是使用Observable或应该留在TPL吗?

编辑:忘了提到我想SomeMethod在它自己的线程中运行.

c# task-parallel-library system.reactive

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

WPF ListView/GridView单选错误

当SelectionMode设置为Single时,WPF中的ListView/GridView中存在一个奇怪的错误.

重现方式:

生成一个集合(集合必须有足够的项目,以便ListView至少可以滚动2-3页):

var customers = from c in _db.Customers
    orderby c.Name, c.City
     select c;
Run Code Online (Sandbox Code Playgroud)

将集合绑定到ListView:

dataGrid.ItemsSource = customers.ToList();
Run Code Online (Sandbox Code Playgroud)

在第一页上,将您的选择更改为3-4项.记住您之前选择的项目.使用鼠标滚轮向下滚动,以便您进入下一页.向后滚动.瞧!你会看到你点击的所有项目都被选中了?!此错误的图片:http: //img261.imageshack.us/img261/133/listview.jpg

同样的问题也困扰着Wpf工具包的数据网格.

更奇怪的是,每个选择都附加到SelectedItems属性.因此,如果您更改了10次选择,则SelectedItems属性中将包含10个项目,并将当前选择作为最后一项.

有人能告诉我为什么会这样吗?这是故意还是错误?对我来说似乎更像是一个错误.

其他人也遇到过这个bug.旧文章,但错误仍然存​​在:http: //cs.blueberryislandmedia.com/blogs/blueberries/archive/2009/04/24/bug-in-wpf-listview-single-selection-mode.aspx

c# wpf listview

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