小编Ste*_*ane的帖子

为什么VS2010会删除我的引用?

在一个小型控制台应用程序中,我正在编写测试的东西,我需要添加一个从另一个解决方案的构建构建的DLL的引用."添加引用"对话框工作正常; 在浏览到磁盘上的DLL并添加它之后,我看到它带有绿色勾号,它出现在解决方案资源管理器中的引用列表中.到目前为止一切正常,但是当我关闭"添加引用"对话框时,刚刚添加的引用将从解决方案资源管理器中的引用列表中消失.

到底是怎么回事?为什么会发生这种情况,我该如何解决?有任何想法吗?

reference visual-studio-2010 visual-studio

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

如何指定一个属性是另一个属性C#XML序列化?

我想指定XML可序列化类中的一个属性是类中另一个属性的属性,而不是类本身的属性.这可能不创建额外的类吗?

例如,如果我有以下C#类

class Alerts
{
  [XmlElement("AlertOne")]
  public int AlertOneParameter { get; set; }

  public bool IsAlertOneEnabled { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何指定IsAlertOneEnabled是AlertOne的属性,以便XML序列化为以下内容?

<Alerts>
  <AlertOne Enabled="True">99</AlertOne>
</Alerts>
Run Code Online (Sandbox Code Playgroud)

c# xml serialization xml-serialization

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

如何重构这些通用方法?

更新:我应该在原帖中提到我想在这里学习更多关于泛型的知识.我知道这可以通过修改基类或创建两个文档类实现的接口来完成.但是为了这个练习,我只对那些不需要对文档类或它们的基类进行任何修改的解决方案感兴趣.我认为这个问题涉及扩展方法的事实会暗示这一点.

我写了两个几乎相同的泛型扩展方法,并试图找出如何将它们重构为单个方法.它们的区别仅在于,一个在List上运行,另一个在List上运行,我感兴趣的属性是AssetDocument的AssetID和PersonDocument的PersonID.尽管AssetDocument和PersonDocument具有相同的基类,但每个类中都定义了属性,因此我认为这没有帮助.我试过了

public static string ToCSVList<T>(this T list) where T : List<PersonDocument>, List<AssetDocument>
Run Code Online (Sandbox Code Playgroud)

我想我可能会测试类型并采取相应的行动,但这会导致语法错误

类型参数'T'继承冲突的约束

这些是我想要重构为单一方法的方法,但也许我只是过分了,他们最好保持原样.我想听听你的想法.

public static string ToCSVList<T>(this T list) where T : List<AssetDocument>
{
  var sb = new StringBuilder(list.Count * 36 + list.Count);
  string delimiter = String.Empty;

  foreach (var document in list)
  {
    sb.Append(delimiter + document.AssetID.ToString());
    delimiter = ",";
  }

  return sb.ToString();
}

public static string ToCSVList<T>(this T list) where T : List<PersonDocument>
{
  var sb = new StringBuilder(list.Count * 36 + list.Count);
  string delimiter = String.Empty; …
Run Code Online (Sandbox Code Playgroud)

c# generics refactoring

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

Silverlight调试; 没有附加过程

我使用Google Chrome作为默认浏览器,但更喜欢使用Internet Explorer来调试Silverlight应用程序.因此,我设置了我的Web项目属性,并检查Silverlight调试器选项.

在此输入图像描述

这已经很好用了很多年但是从度假回来后我发现运行silverlight的iexplore.exe进程不再附加到调试器,我必须手动附加它.当没有调试我的应用程序时,我可以检查Debug | 附加到Process ...对话框,看到没有运行iexplore.exe的实例.然后我点击F5并启动调试会话并再次查看,之后有两个实例,其中一个是附加的,但不是运行Silverlight的实例.一旦我附加了另一个,调试工作正常,我可以点击断点并单步执行代码没有问题.

在此输入图像描述

任何关于我缺少什么的想法,以使调试器附加到正确的过程将不胜感激.

debugging silverlight

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

getElementById() 在 display:none 时无法获取元素

当要查找的元素具有 时,我们有几种情况$get('foo')document.getElementById('foo')失败style="display:none;"。这似乎在某些浏览器中有效,但在其他浏览器中无效;特别是下面显示的情况在兼容模式下在 IE9 中工作正常,但在兼容模式关闭时失败。

谁能解释为什么会发生这种情况,以及我们如何解决它?下面是一个例子。

我们的 ASPX 页面包含

<span id="JobAddressCheckBoxWrapper" style="display: none;">
  <asp:CheckBox ID="JobAddressCheckBox" CssClass="DefaultTextCell" runat="server" Text="__Job address"
    Style="margin-right: 2em;" onclick="ShowJobAddress();" />
</span>
<span id="PredefinedReplyCheckBoxWrapper">
  <asp:CheckBox ID="PredefinedReplyCheckBox" CssClass="DefaultTextCell" runat="server"
    Text="__Pre-defined reply" onclick="ShowReplies()" AutoPostBack="false" Style="margin-right: 2em;" />
</span>
Run Code Online (Sandbox Code Playgroud)

这导致生成的 HTML

<span style="display: none;" id="JobAddressCheckBoxWrapper">
  <span style="margin-right: 2em;" class="DefaultTextCell">
    <input id="JobAddressCheckBox" onclick="ShowJobAddress();" name="JobAddressCheckBox" type="checkbox">
    <label for="JobAddressCheckBox">Job address</label>
  </span>
</span>
<span id="PredefinedReplyCheckBoxWrapper">
  <span style="margin-right: 2em;" class="DefaultTextCell">
    <input id="PredefinedReplyCheckBox" onclick="ShowReplies();" name="PredefinedReplyCheckBox" type="checkbox">
    <label for="PredefinedReplyCheckBox">Predefined reply</label>
  </span>
</span>
Run Code Online (Sandbox Code Playgroud)

以下 …

javascript asp.net-ajax

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

如何检测 CurrentCulture 是否已被用户自定义?

我想知道如何确定 CultureInfo.CurrentCulture 返回的 CultureInfo 实例是否具有所有默认值,或者是否已由用户自定义。

我已经使用以下 LINQPad 代码段和 LINQPad 命令行运行程序进行了一些测试。

var ci = CultureInfo.CurrentCulture;
var dtf = ci.DateTimeFormat;

ci.Name.Dump("CultureInfo");
dtf.FullDateTimePattern.Dump("FullDateTimePattern");
dtf.LongDatePattern.Dump("LongDatePattern");
dtf.LongTimePattern.Dump("LongTimePattern");
Run Code Online (Sandbox Code Playgroud)

我在区域对话框中选择英语(南非)作为我的格式,我的代码段报告以下内容。

E:\Junk>lprun CurrentCulture.linq
CultureInfo: en-ZA
FullDateTimePattern: dd MMMM yyyy hh:mm:ss tt
LongDatePattern: dd MMMM yyyy
LongTimePattern: hh:mm:ss tt
Run Code Online (Sandbox Code Playgroud)

然后我将长日期格式更改为隐藏当天的前导零,并将长短时间更改为 24 小时制。该代码段现在报告了这一点。

E:\Junk>lprun CurrentCulture.linq
CultureInfo: en-ZA
FullDateTimePattern: d MMMM yyyy HH:mm:ss
LongDatePattern: d MMMM yyyy
LongTimePattern: HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

尽管文化名称保持不变,但我更改的属性向我显示了新值。

我的问题是是否有一个属性或方法可以告诉我 CurrentCulture 返回的文化是否已从其默认值(在本例中为 en-ZA)更改。我认为 CultureInfo.UseUserOverride 可能是该属性,但在任何一种情况下它都返回 true。

.net c# cultureinfo currentculture regional-settings

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

如何将整个字符串与单个正则表达式匹配为两种格式之一?

我需要验证可以具有两种格式之一的值,并且尝试使用单个正则表达式执行此操作,但无法弄清楚它为什么不起作用.

第一种格式恰好是17个字母数字字符,表达式^[A-Za-z0-9]{17}$与测试值正确匹配,5UXWX7C56BA123456但不与缩短值5UXWX7C56BA12345或加长值匹配5UXWX7C56BA1234569.

第二种格式恰好是8个字母数字字符,后跟星号或下划线,另外还有两个字母数字字符.表达式^[A-Za-z0-9]{8}[*_][A-Za-z0-9]{2}$正确匹配测试值,5UXWX7C5*BA但不匹配缩短值5UXWX7C5*B或加长值5UXWX7C5*BA1.

然而,当我尝试组合表达式时,我会得到不同的意外结果,具体取决于我首先放置的子表达式.以下代码片段演示了

var pattern1 = new Regex(@"^([A-Za-z0-9]{17})|([A-Za-z0-9]{8}[*_][A-Za-z0-9]{2})$");
var pattern2 = new Regex(@"^([A-Za-z0-9]{8}[*_][A-Za-z0-9]{2})|([A-Za-z0-9]{17})$");

var values = new string[] 
{ 
    "5UXWX7C56BA12345", "5UXWX7C56BA123456", "5UXWX7C56BA1234569", 
    "5UXWX7C5*B", "5UXWX7C5*BA", "5UXWX7C5*BA1" 
};

Console.WriteLine($"Using {pattern1}\n");
Console.WriteLine($"  {"Value",-20}{"IsMatch",-9}{"Expected",-10}");
Console.WriteLine($"  {new string('-', 37)}");
values
    .Select(x => new { Value = x, Result = pattern1.IsMatch(x), ExpectedResult = x.Length == 11 || x.Length == 17 })
    .Select(x => $"  {x.Value,-20}{x.Result,-9}{x.ExpectedResult} {(x.Result == x.ExpectedResult ? …
Run Code Online (Sandbox Code Playgroud)

.net c# regex

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

SystemSounds播放不起作用

我试图用C#程序播放Asterisk系统声音

System.Media.SystemSounds.Asterisk.Play();
Run Code Online (Sandbox Code Playgroud)

但没有声音播放.我的系统确实为Asterisk设置了声音,而其他程序(不是由我编写)会导致各种系统声音播放.

任何人都可以提出任何可能的原因吗?

c# audio

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

LINQ to Objects问题

我正在编写一个传递List <AssetMovements>的方法,其中AssetMovements看起来像

public class AssetMovements
{
  public string Description { get; set; }
  public List<DateRange> Movements { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够将这些对象展平为所有Movements的列表而不管Description如何,并且我试图找出我需要执行此操作的LINQ查询.我以为

from l in list select l.Movements
Run Code Online (Sandbox Code Playgroud)

会这样做并返回IEnumerable <DateRange>但它返回IEnumerable <List <DateRange >>并且我不确定如何纠正这个.有什么建议?

linq linq-to-objects

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

防止 RegEx 中的重复匹配

以下代码

string expression = "(\\{[0-9]+\\})";
RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
Regex tokenParser = new Regex(expression, options);

MatchCollection matches = tokenParser.Matches("The {0} is a {1} and the {2} is also a {1}");
Run Code Online (Sandbox Code Playgroud)

将匹配并捕获“{0}”、“{1}”、“{2}”和“{1}”。

是否可以更改它(正则表达式或 RegEx 的选项),以便匹配并捕获“{0}”、“{1}”和“{2}”。换句话说,每场比赛应该只捕获一次?

c# regex unique distinct

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