我们的API有一个继承自IEnumerable的接口,如下所示:
public interface IFoos : IEnumerable<IFoo>
{
// Additional foo-collection-specific methods
}
Run Code Online (Sandbox Code Playgroud)
我正在为依赖于IFoos的课程编写单元测试.它有一个迭代IFoos的方法,如下所示:
public class Bar
{
public IFoos Foos {get; set;}
public void FooItUp()
{
foreach (IFoo foo in this.Foos)
{
foo.JumpAround();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的单元测试中,我设法将依赖关系存根并返回一个带有Rhino Mocks的枚举器,如下所示:
[Test]
public void FooItUp_JumpsUpJumpsUpAndGetsDown()
{
// Arrange
var mocks = new MockRepository();
var stubFoo1 = mocks.Stub<IFoo>();
var stubFoo2 = mocks.Stub<IFoo>();
var stubFoos = mockRepository.Stub<IFoos>().
var fooEnumerator = new List<IFoo> { stubFoo1, stubFoo2 }.GetEnumerator();
stubFoos.Stub(x => x.GetEnumerator()).Return(null).WhenCalled(x => x.ReturnValue = fooEnumerator);
Bar bar …Run Code Online (Sandbox Code Playgroud) 我在OpenXML API或Word/VSTO API中没有任何运气,找到了创建或修改书签可见性的方法.即使在Word中手动添加书签,也没有要检查的框以隐藏书签.虽然是在书签对话框,让你一个复选框显示隐藏的书签.那么如何在XML中表示隐藏的书签,您可以使用Open XML SDK创建它们吗?或者它们是MS不再希望我们创造的遗产?
我们有一个.NET但非Metro应用程序,内置在Visual Studio 2010中.我们希望在桌面上为我们的应用程序显示一个漂亮的512x512(或其他)图像.我们不需要Live Tile功能,我们只需要一个显示一个漂亮的Metro尺寸图像的快捷方式.该方案OblyTile和现代瓷砖制造商可以做到这一点,尽管目前尚不清楚.他们是以编程方式创建LNK快捷方式吗?或者它们实际上是自己的快捷方式(Metro应用程序),然后启动您的旧应用程序?
如果它是前者,那么显然可以为非Win8应用程序创建Metro尺寸的桌面图标.我们如何编写这样一条捷径的创作脚本?我们不关心我们需要使用哪种语言(JScript,C++,C#,等等),只需要指向正确的方向.我们使用WiX,因此我们在安装脚本方面具有很大的灵活性.
是否建议在派生接口中使用"new"关键字为具有相同名称的属性或方法提供更多派生的返回值?
假设我有一个接口IDocument:
public interface IDocument
{
IParagraphs Paragraphs { get; }
IRevisions Revisions { get; }
IStyles Styles { get; }
}
Run Code Online (Sandbox Code Playgroud)
并派生出一个IRtfDocument.
public interface IRtfDocument: IDocument
{
string Rtf { get; }
...
}
Run Code Online (Sandbox Code Playgroud)
我还有更多派生的IParagraphs,IRevisions和IStyles接口:IRtfParagraphs,IRtfRevisions,IRtfStyles.许多特定于RTF的需求推动了他们的创建.
当我访问RTF文档的段落时,我想避免将它们转换为IRtfParagraphs.修订和样式也一样.避免同时使用"IRtfParagraphs"和"IParagraphs"也是很好的.所以我什么喜欢做的是这样的:
public interface IRtfDocument : IDocument
{
new IRtfParagraphs Paragraphs { get; }
new IRtfRevisions Revisions { get; }
new IRtfStyles Styles { get; }
string Rtf { get; }
}
Run Code Online (Sandbox Code Playgroud)
这被认为是好习惯吗?它似乎适合这种情况,但我想由你的C#退伍军人来管理它.
更新:所以我实际上继续尝试使用我的界面中描述的"新".我的RtfDocument类最终需要一个IDocument.Styles属性和一个IRtfDocument.Styles属性.虽然我可以让IDocument.Styles属性返回IRtfDocument.Styles的值,但由于我正在实现两个属性,因此感觉不太正确.
这似乎编译器不考虑该IRtfStyles从IStyles派生的事实,所以它坚持我兼得.如果Liskov Substitution Principle …
我们有一个列出一堆路径的文本文件,以及一个从该文件中读取行的批处理文件.
例如,TargetFolders.txt可能包含以下行:
%ProgramFiles%\Acme\FooBar %VersionNumber%
Run Code Online (Sandbox Code Playgroud)
当然,当我们从文本文件中读取这一行时(使用FOR命令),变量%% I接收实际行文本,使用%符号而不是替换变量值.所以,
SET VersionNumber=7.0
FOR /F "eol=; delims=" %%I IN (TargetFolders.txt) DO (
echo Folder: %%I
)
Run Code Online (Sandbox Code Playgroud)
打印
Folder: %ProgramFiles%\Acme\FooBar %VersionNumber%
Run Code Online (Sandbox Code Playgroud)
如何使它替换实际的变量值,以便打印
Folder: C:\Program Files\Acme\FooBar 7.0
Run Code Online (Sandbox Code Playgroud)
?
我们有一个表,表示与实体(称为项目)关联的值树,其中 ParentID 列指行父级的 id 列。id 列是一个自动递增的 IDENTITY 列和主键。根节点的 ParentID 为 0。
我们希望能够克隆给定项目的数据,并让生成的 ParentID 引用复制值的适当新 ID,以满足示例下面描述的限制。
例如,复制下表中 ProjectID 611 的数据:
id ProjectID Value ParentID
--------------------------------------------------
1 611 Animal 0
2 611 Frog 1
13 611 Cow 1
14 611 Jersey Cow 13
25 611 Plant 0
29 611 Tree 25
31 611 Oak 29
Run Code Online (Sandbox Code Playgroud)
应该导致:
id ProjectID Value ParentID
--------------------------------------------------
1 611 Animal 0
2 611 Frog 1
13 611 Cow 1
14 611 Jersey Cow 13
25 611 Plant 0 …Run Code Online (Sandbox Code Playgroud) 有没有办法配置 Azure Functions 如何将对象序列化为 JSON 以获取返回值?我想对枚举值使用字符串而不是整数。
例如,鉴于此代码:-
public enum Sauce
{
None,
Hot
}
public class Dish
{
[JsonConverter(typeof(StringEnumConverter))]
public Sauce Sauce;
}
public static class MyFunction
{
[FunctionName("MakeDinner")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
var dish = new Dish() { Sauce = Sauce.Hot };
return req.CreateResponse(HttpStatusCode.OK, dish, "application/json");
}
}
Run Code Online (Sandbox Code Playgroud)
该函数返回:-
{
"Sauce": 1
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它返回下面?
{
"Sauce": "Hot"
}
Run Code Online (Sandbox Code Playgroud)
我试过返回一个字符串而不是一个对象,但结果包含\"转义符;我想要一个 JSON 结果,而不是一个 JSON 对象的转义字符串表示。
我知道在标准中ASP.NET我可以使用配置来设置序列化选项。这在函数中甚至是可能的,还是应该将所有枚举转换为字符串常量?
我们的一个类提供了tr1 :: function回调对象.但是,当我尝试为其分配成员函数时,我收到编译器错误.
以下示例未经测试,仅用于说明:
foo.h中:
class Foo()
{
public:
Foo();
std::tr1::function<void (int x)> F;
}
Run Code Online (Sandbox Code Playgroud)
Bar.h:
class Bar()
{
public:
Bar();
Foo* foo;
void HookUpToFoo();
void Respond(int x);
}
Run Code Online (Sandbox Code Playgroud)
Bar.cpp:
Bar()
{
this->foo = new Foo();
this->HookUpToFoo();
}
void Bar::HookUpToFoo()
{
this->foo->F = &Bar::Respond; // error
}
void Bar::Respond(int x)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我们得到的编译器错误是指xrefwrap中的一行,是错误1错误C2296:'.*':非法,左操作数的类型为'int'C:\ Program Files\Microsoft Visual Studio 9.0\VC\include\xrefwrap 64
..在分配代表时我做错了什么?我想走更现代的路线并使用tr1 :: function而不是函数指针.
我们有一个实用程序项目,Foo.Testing.Common以实际测试项目的帮助程序类命名,名称类似于Foo.Tests.Unit和Foo.Tests.Integration。Common 项目没有测试,只有基类、实用方法等。它引用了 XUnit,所以我可以使用Xunit.Abstractions.
当我们通过 .net 命令行或 VS Test Explorer 运行所有测试时,如何避免看到如下错误?例如,在测试发现期间,VS 测试输出中会出现以下错误。
No test is available in C:\Foo.Testing.Common\bin\Debug\netcoreapp3.1\Foo.Testing.Common.dll. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException...
Run Code Online (Sandbox Code Playgroud)
我假设测试过程正在匹配测试以查找测试项目,然后如果其中一个项目没有测试,则会抛出错误。或者也许它正在寻找引用任何 xunit 包的项目?
我们可以重命名该项目,但是有其他方法吗?希望避免将特定测试项目列表传递到命令行,只是为了避免“未找到测试”警告。也就是说,dotnet test应该可以工作。
更新:我也尝试过仅引用xunit.abstractions而xunit.extensibility.core不是主xunit包,但 Common 项目仍然被识别为测试项目。
还尝试IsTestProject在项目属性中设置为 false。
在匹配正则表达式时,我想从结果中排除非捕获组.我错误地认为他们被默认排除在外,因为他们被称为非捕获组.
但是出于某种原因,Regex.Match表现得好像我甚至没有指定一个非捕获组.尝试在立即窗口中运行它:
System.Text.RegularExpressions.Regex.Match("b3a",@"(?:\d)\w").Value
Run Code Online (Sandbox Code Playgroud)
我期待结果
"a"
Run Code Online (Sandbox Code Playgroud)
但实际上
"3a"
Run Code Online (Sandbox Code Playgroud)
这个问题建议我查看各组,但结果中只有一个组,它也是"3a".它包含一个Capture,也就是"3a".
这里发生了什么?Regex是否有问题,或者我需要设置一个选项吗?
c# ×5
.net ×2
.net-core ×1
azure ×1
batch-file ×1
c++ ×1
command-line ×1
delegates ×1
inheritance ×1
interface ×1
json ×1
json.net ×1
live-tile ×1
ms-word ×1
nunit ×1
openxml ×1
regex ×1
rhino-mocks ×1
sql ×1
sql-server ×1
t-sql ×1
tr1 ×1
unit-testing ×1
vsto ×1
windows ×1
windows-8 ×1
xunit ×1
xunit.net ×1