2011-09-08 50 views
0

这里是场景,我正在做一个基于用户指定的设置/属性的类正则表达式的类。将字符串分配给C#中的常量字符串的一些方法?

我创建公共字符串KeyWords能够从用户最初获取信息,我不能定义为常量,因为值根据用户输入而改变。

然后,我需要将KeyWords中的值分配给一个常量值,因为我需要根据这些关键字创建一个新的正则表达式。我该怎么做?

+0

什么是你的代码是什么样子? – BoltClock

+1

你能解释一下为什么你只能对一个常量做正则表达式,这没有意义 – Ryk

+0

@Ryk:我在猜测OP不知道如何将非文字字符串格式化为正则表达式。 –

回答

3

理想情况下,对于在类的对象生命周期中应该只分配一次的变量,可以考虑使用ReadOnly字段(更好的属性)。

这样,在Settings类的构造函数中,您将能够为它们分配匹配的值。

在构造函数代码执行后,属性/字段将不可用于赋值。

只读VS静态:http://weblogs.asp.net/psteele/archive/2004/01/27/63416.aspx

只读(MSDN):http://msdn.microsoft.com/en-us/library/acdd6hb7(v=VS.100).aspx

希望这有助于!

0

然后,我需要将KeyWords中的值分配给一个常量值,因为我需要根据这些关键字创建一个新的正则表达式。

这没有意义。你为什么需要它们作为常量来创建一个Regex?显然,它们不是常数,事实上它们并不是一成不变的。

0

听起来不像它应该是const。你应该只使用常数永远不会改变。例如,const decimal Pi = 3.14;是有意义的。每次运行应用程序时,关键字都会发生变化,因此它们不应该保持不变。

1

它或者需要是恒定的或者不是,中间没有。

为什么你认为你需要使KeyWords在某个点不变?你不能在C#中强制实现一个参数不变的要求,所以我不明白你为什么需要这个。

Regex类构造函数和方法将采取任何字符串,只需传入正则表达式即可进行匹配。

例如,如果你有一些关键字和想匹配其中任何一个,使用方法:

keyWords = new List<string> { /* some number of keywords to match */ }; 
var bldr = new StringBuilder(); 

// loop through all but the last string to avoid 
// a trailing '|' character. 
foreach(var s in keyWords.Take(keyWords.Count - 1)) 
{ 
    bldr.AppendFormat("{0}|", s); 
} 

// get the last one, don't add a '|' 
bldr.Append(keyWords.Last()); 

var reg = new RegEx(bldr.ToString()); 

我在你这里什么后一种猜测,你不告诉我们问题你正在努力解决问题,而是告诉我们一个你认为可以使其工作的奇怪解决方案。

0

您仍然可以创建你的用户的输入关键字正则表达式,像这样:

var keyword = "MatchMe"; 
var regex = new Regex(keyword); 
var isMatch = regex.IsMatch("My MatchMe string"); 
相关问题