小编Sar*_*els的帖子

OOP:你如何在OOP中建立艺术家,专辑和歌曲关系

我理解继承的基础知识,但这个让我感到困惑.你会怎么说:

  • 专辑对象具有一个或多个艺术家对象
  • 专辑对象具有一个或多个歌曲对象

我目前的代码只允许每个对象一首歌曲:

class Song extends Album{}
class Album extends Artist{}
Run Code Online (Sandbox Code Playgroud)

我确定我忽略了一些重要的事情.有什么想法吗?

我在PHP中这样做

php oop inheritance class

5
推荐指数
3
解决办法
1463
查看次数

C#字符串替换问题

快问.我从目录列表中填充了一个列表框.每个文件都包含其名称和〜#####.我正在尝试将它全部读入一个字符串并用什么都替换〜####.####可以是长度为1-6的数字,可以是0-9之间的任何数字.这是我正在使用的代码:

string listItem = (listBox1.SelectedItem.ToString().Replace("~*",""));
Run Code Online (Sandbox Code Playgroud)

例:

Here223~123  --->  Here
Here224~2321 ----> Here
Run Code Online (Sandbox Code Playgroud)

我无法替换任何数字,因为我需要在〜之前的数字

c# string

5
推荐指数
3
解决办法
421
查看次数

C#使用静态变量作为DeploymentItem的参数

我想DeploymentItem在MSTest单元测试中使用静态变量作为参数,但似乎我不能这样做.当单元测试运行时,需要将一个XSL文件与DLL文件一起复制,并将该位置定义为

private static string _xslPath = Path.Combine("MyProjectDir", "transform.xsl");
Run Code Online (Sandbox Code Playgroud)

但是,当我然后执行以下操作时:

[TestMethod]
[DeploymentItem(DLL)]
[DeploymentItem(_xslPath)]
public void XmlToResultsTest() { }
Run Code Online (Sandbox Code Playgroud)

我得到这个构建错误:

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

好的,好的,但是自己组装路径似乎太脏了:

[DeploymentItem(@"MyProjectDir\transform.xsl")]
Run Code Online (Sandbox Code Playgroud)

我在这里过于挑剔想要使用Path.Combine吗?我还缺少另一种选择吗?我想我可以把XSL文件放在根解决方案目录中,这样我就不必将项目目录作为路径的一部分传入.

c# mstest path deploymentitem

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

C#属性在派生类中不可用

我不确定发生了什么.我有以下基类:

public class MyRow : IStringIndexable, System.Collections.IEnumerable,
    ICollection<KeyValuePair<string, string>>,
    IEnumerable<KeyValuePair<string, string>>,
    IDictionary<string, string>
{
    ICollection<string> IDictionary<string, string>.Keys { }
}
Run Code Online (Sandbox Code Playgroud)

然后我有这个派生类:

public class MySubRow : MyRow, IXmlSerializable, ICloneable,
    IComparable, IEquatable<MySubRow>
{
    public bool Equals(MySubRow other)
    {
        // "MyRow does not contain a definition for 'Keys'"
        foreach (string key in base.Keys) { }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这个错误?"'MyNamespace.MyRow'不包含'Keys'的定义".这两个类都在MyNamespace命名空间中.我试过访问this.Keys,base.Keys并且都没有从内部工作MySubRow.我尝试将Keys属性标记为public,MyRow但得到"修饰符'公共'对此项无效",我认为因为有必要实现一个接口.

c# inheritance interface explicit-interface class-hierarchy

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

想要使用错误的Add方法的C#对象初始值设定项

我有以下类层次结构:

public class Row : ICloneable, IComparable, IEquatable<Row>,
    IStringIndexable, IDictionary<string, string>,
    ICollection<KeyValuePair<string, string>>,
    IEnumerable<KeyValuePair<string, string>>,
    System.Collections.IEnumerable
{ }

public class SpecificRow : Row, IXmlSerializable,
    System.Collections.IEnumerable
{
    public void Add(KeyValuePair<MyEnum, string> item) { }
}
Run Code Online (Sandbox Code Playgroud)

但是,尝试执行以下操作会出错:

var result = new SpecificRow
    {
        {MyEnum.Value, ""},
        {MyEnum.OtherValue, ""}
    };
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

集合初始化程序的最佳重载Add方法'Row.Add(string,string)'具有一些无效参数

我怎样才能使得在派生类上使用对象初始化器SpecificRow允许类型MyEnum?好像应该看到这个Add方法SpecificRow.

更新: 我实现了一个额外的接口,SpecificRow所以它现在看起来像这样:

public class SpecificRow : Row, IXmlSerializable,
    System.Collections.IEnumerable,
    ICollection<KeyValuePair<MyEnum, string>>
{ }
Run Code Online (Sandbox Code Playgroud)

但是,我仍然得到同样的Add错误.我将尝试IDictionary<MyEnum, string>下一步.

c# polymorphism inheritance dictionary object-initializers

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

Visual Studio对象浏览器忽略XML注释格式

在我对方法和类的.NET XML注释中,我尝试在<example><code></code></example>块中提供用法示例.当我使用Sandcastle使用我的XML文档生成.chm文档文件时,它总是很好地格式化并尊重我的<code>块中的换行符.但是,当我在Visual Studio的对象浏览器中浏览类和方法时,所有内容都在一行中运行,并且字体完全相同(代码不是等宽字体).这是由于我在XML评论中没有做到的事情,还是对象浏览器只是愚蠢的?我专门使用Visual Studio 2008 Team System.

formatting xml-documentation visual-studio objectbrowser

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

将VS2008中的类图添加到Sandcastle帮助文件中

我在Visual Studio 2008 Team System中为我的项目制作了类图,我想将这些图嵌入到我的Sandcastle .chm文件中.我一直在寻找Sandcastle 的Drawbridge组件,但他们显然是在处理旧版的Sandcastle; 这并不奇怪,因为看起来Drawbridge最后一次更新是在2008年.使用当前版本的Sandcastle我在Vista中,它安装在C:\ Program Files\Sandcastle帮助文件生成器.安装Drawbridge后,它创建了以下目录结构:C:\ Program Files\EWSoftware\Sandcastle帮助文件生成器\ BuildComponents.然后它在那里放了一个XML组件配置文件,但当然这对我安装的Sandcastle版本没有任何意义,因为它不在其路径的任何地方.

我希望只是将XML配置文件复制到Sandcastle的当前安装目录,但那里没有BuildComponents目录.那么,有没有人知道Drawbridge是否仍然适用于Sandcastle?如果有,我该如何安装?如果没有,我如何在我的Sandcastle .chm帮助文件中嵌入VS2008类图?

这与此问题略有关系.

documentation sandcastle helpfile class-diagram visual-studio

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

解析 ERB 文件的库

我试图以 Hpricot/Nokogiri 类型的方式解析而不是评估 rails ERB 文件。我试图解析的文件包含与使用 ERB(标准 Rails 视图文件)生成的动态内容混合的 HTML 片段ERB 符号、<%、<%= 等,就好像它们是 html/xml 标签一样。

理想情况下,我会得到一个类似于 DOM 的结构,其中 <%, <%= 等符号将作为它们自己的节点类型包含在内。

我知道可以使用正则表达式将某些东西组合在一起,但我正在寻找更可靠的东西,因为我正在开发一个工具,我需要在一个非常大的视图代码库上运行,其中 html 内容和 erb 内容是重要的。

例如,内容如下:

等等等等等等
<div>我的好文字 <%= my_dynamic_expression %></div>

将返回一个树结构,如:

根
 - text_node(等等等等)
 - 元素(div)
    - text_node(我的好文字)
        - erb_node (<%=)

ruby parsing lex erb

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

使用指令进行组织,重新运行测试?

在进行提交之前,我希望在我的C#解决方案中运行所有数百项单元测试,因为它们仅需花费几分钟即可运行。但是,如果我已经全部运行了,一切都很好,然后我决定using在我的解决方案中组织指令,是否真的有必要重新运行单元测试?我有一个宏,它遍历解决方案中的所有文件,并在每个宏上运行Visual Studio的“删除和排序”命令。以我的理解,只要using更改指令后仍在构建所有项目,则运行时也应该没问题。这是正确的想法吗?

.net c# unit-testing using-directives compile-time

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

关于C#项目中神秘界面的警告

每次我构建我的C#解决方案时,我都会收到一些关于我从未见过或写过的接口的警告.我试过谷歌搜索其中一些,但没有得到点击.这些可能被埋在我正在引用的组件中吗?如果是这样,有没有办法让这些警告消失?

接口'IAlertable'标记为[dual],但不是从IDispatch派生的.它将被转换为IUnknown派生的接口.

接口'ICustomizationPermissionsReports'标记为[dual],但不是从IDispatch派生的.它将被转换为IUnknown派生的接口.

接口'IAlertable2'标记为[dual],但不是从IDispatch派生的.它将被转换为IUnknown派生的接口.

c# warnings interface idispatch iunknown

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