如何将委托(命名,匿名,lambda)存储在通用列表中?基本上我正在尝试构建一个委托字典,从中我可以使用密钥访问存储的委托并执行它并按需返回值.是否可以在C#4中完成?有什么想法来实现它吗?注意:异类列表更适合存储任何类型的委托.
有没有办法隐藏最终用户的协议?我会试着详细描述我想要的东西.我有类我们称之为EndUserClass,它符合一些协议,比方说HiddenClassDelegate和我希望隐藏的最终用户协议.代码如下所示:
@interface EndUserClass : NSObject <HiddenClassDelegate>
{
// .....
}
@end
Run Code Online (Sandbox Code Playgroud)
我希望使用以下声明保持相同的功能:
@interface EndUserClass : NSObject
{
// .....
}
@end
Run Code Online (Sandbox Code Playgroud)
有没有办法私下遵守协议?我知道我可以在类声明中跳过委托,但它给出了我不想要的编译器警告
我正在尝试创建自己的HTML Helper,它接受一个表达式(类似于内置的LabelFor <>帮助器.我已经找到了在表达式类似于此时获取属性值的示例:
model => model.Forename
Run Code Online (Sandbox Code Playgroud)
但是,在我的一些模型中,我想获取子元素中的属性,例如
model => mode.Person.Forename
Run Code Online (Sandbox Code Playgroud)
在这些例子中,无论如何我都找不到(轻松)获取Forename的值.任何人都可以建议我应该如何获得这个价值.
谢谢
如果我们谈论域对象,为什么setter在接口上是坏的?
澄清:
我有一个存储在db中的域对象.它有几个领域,设置成本很高.即
class JurasicPark {
private long area;
...other fields ...
getters and setters
....
private Collection<Dinosaur> dinosaurs;
private Collection<ExoticTree> flora;
public Collection<Dinosaur> getDinosaurus(){
...
}
public Collection<ExoticTree> getFlora(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
字段dinosaurs并且flora初始化和设置成本非常高.但在许多情况下,我不需要每次都设置这个字段.
问题是,如果我返回到JurasicPark类的用户实例,dinosaurs或者flora没有初始化它,那么填充导致NPE或我自己投掷的一些预期.我不想让api用户考虑这个并记住哪些字段可能没有设置.
因此,为了解决这个问题,我考虑创建两个接口IJurasicPark,IFullJurasicPark第一个将所有访问方法声明为简单字段,前者将声明访问方法flora和dinosaurs字段.
interface IFullJurasicPark extends IJurasicPark
class IJurasicPark implements IFullJurasicPark
Run Code Online (Sandbox Code Playgroud)
在这种方法中IJurasicPark接口将包含getter和setter,所以我实际上问这个设计是不是很糟糕?
我也不想在使用LazyInit异常的hibernate风格中实现它.
我有一个Windows CMD脚本,它接受许多参数并执行EXE,首先传递一些硬编码参数,然后传递用户的所有参数.CMD脚本如下所示:
launcher.exe paramX paramY %*
Run Code Online (Sandbox Code Playgroud)
用户将从Windows shell执行CMD脚本,如下所示:
launcher.cmd param1 param2 param3 [...]
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果参数到CMD脚本包含壳等特殊字符< >和^,用户被迫通过前述各用3插入符号逸出这些^壳转义字符.
1)要将参数传递ten>one给EXE,用户必须按如下方式启动CMD:
launcher.cmd ten^^^>one
Run Code Online (Sandbox Code Playgroud)
这样做的原因是,shell特殊字符^,并>通过命令外壳在两个层面解释,首先在命令行和第二的CMD脚本中.因此,使用脱字符^外壳转义字符转义的shell必须应用两次.问题是这对用户来说并不明显,看起来很难看.
对于这个例子,一个更好的解决方案是用双引号括起参数.但是,这会分解为更复杂的示例,其中包含参数中的文字双引号.
2)要将参数传递"^给EXE,用户必须按如下方式启动CMD:
launcher.cmd "\"^^^^"
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我想支持包含任何低ASCII字符序列的参数,不包括控制字符,即代码点0x20到0x7E.我知道会有一些例子,用户必须使用插入符号来逃避某些shell特殊字符.但是,我不希望用户在这些情况下每次都必须使用3个插入符,因为它们恰好是在调用CMD脚本而不是EXE.
我可以通过使用执行相同操作的EXE替换CMD脚本来解决此问题.但是,有没有办法改变CMD脚本,以便它将参数传递给EXE而不解释shell特殊字符?
我在VB中有以下方法声明,需要将其转换为C#:
<DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Int16) As Boolean
End Function
Run Code Online (Sandbox Code Playgroud)
特别是我不确定ByRef参数说明符是否等同于refC#.
我也不知道Shared == static是否必须如此extern.可能很多人都精通VB和C#,所以我很感激在C#中提供正确的声明.
我有一个zip文件X,我想提取一个文件,位于x/x/x/file.txt.我如何使用Archive::Zip和Perl 这样做?
到目前为止,我尝试过以下方法:
public class Widget
{
public int Id;
public string Name;
}
public static class Main
{
public static void Main()
{
// Initialize store and preload with widgets...
using (var session = store.OpenSession())
{
var widgets = session.Load<Widget>();
foreach(var widget in widgets)
{
Console.WriteLine(widget.Name);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经能够通过添加索引然后使用该索引作为查询来加载所有:
var store = new DocumentStore();
store.DatabaseCommands.PutIndex("AllWidgets", new IndexDefinition<Widget>
{
Map = widget => from widget in widgets
select new { widget }
});
// Back in Main
var widgets = …Run Code Online (Sandbox Code Playgroud) 例如,我有这样的代码
class Base1
{
virtual void wonderFULL() = 0;
};
class Base2
{
// all this weird members
};
class Derived : public Base1, public Base2
{
// not so weird members
};
int main()
{
Derived Wonder;
magicFunction(&Wonder);
return 0;
}
void magicFunction(Base2 *ptr)
{
if (Base1 *b1 = dynamic_cast<Base1 *>(ptr))
b1->wonderFULL();
}
Run Code Online (Sandbox Code Playgroud)
但是,由于不可能将ptr转换为b1,所以neverFULL永远不会被执行.是否有可能进行这样的转换?
c# ×4
.net ×2
lambda ×2
asp.net-mvc ×1
batch-file ×1
c++ ×1
caret ×1
class ×1
cmd ×1
cocoa-touch ×1
delegates ×1
dynamic-cast ×1
escaping ×1
generics ×1
html ×1
html-helper ×1
inheritance ×1
innertext ×1
interface ×1
javascript ×1
jquery ×1
objective-c ×1
oop ×1
perl ×1
ravendb ×1
translation ×1
vb.net ×1
zip ×1