小编ljs*_*ljs的帖子

在C#中使用带有泛型的访问者模式

我想知道以下是否是访客模式的可接受用途.从Accept()或Visit()调用返回时我感到有点不舒服 - 这是否适合使用此模式,如果没有,为什么不呢?

注意:长代码示例的道歉,似乎有必要了解我正在做的事情,因为访问者似乎总是有点参与......

interface IAnimalElement<T>
{
   T Accept(IAnimalVisitor<T> visitor);
}

interface IAnimalVisitor<T>
{
    T Visit(Lion lion);
    T Visit(Peacock peacock);
    T VisitZoo(List<Animal> animals);
}

abstract class Animal
{
    public int Age { get; protected set; }
}

class Lion : Animal, IAnimalElement<int>
{
    public Lion(int age)
    {
        Age = age;
    }

    public int Accept(IAnimalVisitor<int> visitor)
    {
        return visitor.Visit(this);
    }
}

class Peacock : Animal, IAnimalElement<int>
{
    public Peacock(int age)
    {
        Age = age;
    }

    public int Accept(IAnimalVisitor<int> visitor)
    { …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns visitor

8
推荐指数
1
解决办法
6354
查看次数

递归下降与生成的解析器 - 效率

手写递归下降解析器(不可避免地是LL(k))在性能方面与生成的LALR解析器相比如何?

我知道LALR解析器能够处理比LL(k)更多的语法; 但是我打算手工编写我的解析器,递归下降似乎是最合适的选择.是否有可能手工编写任何其他类型(合理可读)?

NB我正在使用带尾调用优化(F#)的函数式语言,因此[精心定制的]递归不会像其他语言一样出现问题.

compiler-construction recursive-descent

7
推荐指数
1
解决办法
2016
查看次数

区分联合的模式匹配

是否有任何方法可以对有区别的联合函数进行模式匹配,例如: -

type Test =
  | A of string
  | B of int
  | C of char

let DefaultTest t =
  match t with
  | A(_) -> A(null)
  | B(_) -> B(0)
  | C(_) -> C('\u0000')

let a = A |> DefaultTest
Run Code Online (Sandbox Code Playgroud)

显然这段代码无效F#,因为DefaultTest接受一个Test类型的参数而不是'a - > Test.如果没有为受歧视的联盟指定价值,有没有办法实现这一目标?

最终,我所追求的是一个输入类型'a - > Test并输出Test(默认值'a)的函数的函数.

f#

7
推荐指数
1
解决办法
2209
查看次数

当你已经很熟悉C#时,是否值得学习Java?

由于C#在许多方面是Java的直接衍生物,我想知道在学习了相当合理的C#之后学习Java是否有任何好处?

注意:请提供明确,直接的建议而不是讨论,以符合SO指南.

c# java

6
推荐指数
3
解决办法
4679
查看次数

使用CSS超链接图像

我知道这可能是有史以来最愚蠢的问题,但是当涉及到CSS时,我是一个初学者; 如何使用源自CSS的图像在网页上超链接图像?我试图在我的网站上设置标题图像链接到首页.谢谢!

编辑:为了说清楚,我是从CSS获取我的图像,标题div的CSS代码如下: -

#header
{
    width: 1000px;
    margin: 0px auto;
    padding: 0px 15px 0px 15px;
    border: none;
    background: url(images/title.png) no-repeat bottom;
    width: 1000px;
    height: 100px;
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何在我的网页上建立这个div超链接,而不必使它成为锚而不是div.

html css

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

在WinForms中实现干净的UI功能同时保持良好的解耦架构的最佳方法是什么?

我倾向于使用相当自我记录的void doSomething()方法来实现UI功能,即如果用户按下此按钮然后执行此操作然后启用此列表框,禁用该按钮等.这是最好的方法吗?是否有更好的模式用于一般UI管理,即如何控制何时启用/禁用控件等.等取决于用户输入?

我常常觉得自己正在转向"做一切"反模式的"大班",因为很多人似乎与"主要"形式的班级互动.通常,即使我在类中包含使用相对模块化设计实现的私有状态变量,我仍然发现它增长得如此之快,这是荒谬的.

那么人们可以给我一些很好的建议来制作高质量,可测试,分离的WinForms设计而不会陷入这些陷阱吗?

.net c# winforms

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

是否有工具列出DLL中的导出方法?

正如问题所述 - 是否有一个很好的工具列出了非托管DLL导出的方法?我希望它也列出COM方法和接口.

com dll

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

如何获取Windows中可用的COM接口列表

有没有办法在带有GUID的Windows机器上获取已注册的COM接口列表?

在任何人认为这与编程无关之前,我需要这些数据以便在f#(或C#)中引用tlbimp未暴露的接口的COM接口.

c# com com-interop

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

与C#相比,F#的表现如何?

当然,F#和C#都编译成IL而CLR JITter完成了大部分的工作,但是我想知道F#语言或其核心库中是否隐含了与C#相比性能较差的内容?

另外,在.net框架中使用函数式编程有什么东西可能会使它比C#慢吗?

我当然会坐下来测量差异,因为这确实是确定的唯一真正的方法,但我只是想知道是否有人对此话题有任何广泛的了解.

也可以看看

c# performance f#

4
推荐指数
2
解决办法
2474
查看次数

不同的值忽略列顺序

我有一张类似于的表: -

+----+---+---+
| Id | A | B |
+----+---+---+    
| 1  | 1 | 2 |
+----+---+---+
| 2  | 2 | 1 |
+----+---+---+
| 3  | 3 | 4 |
+----+---+---+
| 4  | 0 | 5 |
+----+---+---+
| 5  | 5 | 0 |
+----+---+---+
Run Code Online (Sandbox Code Playgroud)

我想删除所有重复的值对,无论哪个列包含哪个值,例如在我想查看的查询之后: -

+----+---+---+
| Id | A | B |
+----+---+---+    
| 1  | 1 | 2 |
+----+---+---+
| 3  | 3 | 4 |
+----+---+---+
| 4 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

4
推荐指数
2
解决办法
852
查看次数

SAFE指向C#中指针(对引用的引用)的指针

在我正在处理的C#应用​​程序中,我有一个很长的标识符如下: -

foo.bar.bwah.blah.whatever.very.very.huge
Run Code Online (Sandbox Code Playgroud)

每当我引用这个对象时,这绝对是一场噩梦,不幸的是我确实需要引用它:

var something = foo.bar.bwah.blah.whatever.very.very.huge.a;
var somethingElse = foo.bar.bwah.blah.whatever.very.very.huge.b;
foo.bar.bwah.blah.whatever.very.very.huge.c = 12;
Run Code Online (Sandbox Code Playgroud)

等等

我想使用更小的某种别名来更新此代码,但问题是我想要更改底层引用,并且在没有显式更新别名的情况下也可以使用别名更新.

目前,如果我做以下事项: -

foo.bar.bwah.blah.whatever.very.very.huge.a = "hello";
string shorter = foo.bar.bwah.blah.whatever.very.very.huge.a;
foo.bar.bwah.blah.whatever.very.very.huge.a = "world";
Console.WriteLine(shorter);
Run Code Online (Sandbox Code Playgroud)

它会输出"你好".我想要达到的目标如下: -

foo.bar.bwah.blah.whatever.very.very.huge.a = "hello";
string** shorterPointer = &foo.bar.bwah.blah.whatever.very.very.huge.a;
foo.bar.bwah.blah.whatever.very.very.huge.a = "world";
Console.WriteLine(**shorter);
Run Code Online (Sandbox Code Playgroud)

哪个会根据需要输出"世界".

我相信你可以使用C#中的不安全代码来实现这样的功能,但是我不能这样做,我只能使用安全代码.

有没有人有任何想法我怎么可能实现这一目标?

请注意:这个问题不是关于字符串是不可变的,我知道它们是 - 事实上我认为它们是出于问题的目的.如果我使用其他类型的话可能更简单...所以当我将"hello"分配给a"then"时,我会在每次场合实例化不同的对象,因此我存储的对a的引用在重新生成后变为无效分配.

.net c#

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

为什么SQL Server 2005会随机截断空白?

以下T/SQL: -

create table #temp(foo varchar(10))

insert into #temp select ''
insert into #temp select 'abc'
insert into #temp select ' '

select len(foo) from #temp where foo = '  '

drop table #temp
Run Code Online (Sandbox Code Playgroud)

返回两个0,尽管标准意味着它应该什么都不返回.此外,它返回两个空白行的长度,其中一个确实长度为0,但也是一个长度为1的行,报告长度为0.

有谁知道这里发生了什么?!

更新:在此知识库文章中,与Microsoft所涵盖的ANSI_PADDING数据库选项相关.

t-sql sql-server

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