小编Tae*_*lia的帖子

有或没有支持字段的自动属性 ​​- 首选项?

我知道在使用自动属性时,编译器会在屏幕后面创建自己的支持字段.但是,在我读过的许多程序中,我看到人们明确地写了

private int _backingField;

public int Property { get { return _backingField; } }
Run Code Online (Sandbox Code Playgroud)

上面和下面有什么区别?

public int Property { get; private set; }
Run Code Online (Sandbox Code Playgroud)

我明白当你在getter或setter中实际存在副作用时使用该属性是显而易见的,但通常情况并非如此.此外,我知道您必须在结构的情况下明确使用支持字段,您不能通过属性访问其成员.

我能找到的唯一区别是调用值的方式在它定义的类中是不同的.那么它是简单的首选项,还是通过其属性调用值或直接访问领域?简单约定?

c# automatic-properties backing-field

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

getter中的'new'关键字>性能如何?

我有以下代码:

public class Character
{
    public Vector2 WorldPixelPosition
    {
        get { return Movement.Position; }
    }
    public Vector2 WorldPosition
    {
        get { return new Vector2(Movement.Position.X / Tile.Width, Movement.Position.Y / Tile.Height); }
    }
    public Vector2 LevelPosition
    {
        get { return new Vector2(WorldPosition.X % Level.Width, WorldPosition.Y % Level.Height); }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在我的代码中的其他地方,我在循环中对Character.LevelPosition进行了大约2500次调用.这意味着每个更新周期,5000'新'Vector2正在制作,而在我的笔记本电脑上,它确实降低了帧速率.

我通过创建暂时修复了它

var levelPosition = Character.LevelPosition;
Run Code Online (Sandbox Code Playgroud)

在我启动循环之前,但是每次遇到类似的情况时,我都会感觉到它的丑陋代码.也许它是 - 要走的路,但我想确定一下.

有没有更好或普遍接受的方式来做到这一点?

我正在使用XNA-Framework,它使用Vector2的是.

c# getter performance xna new-operator

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

Haskell Parsec跳过所有未预定义的单词

学习使用Parsec库,作业的一部分.

编辑:欢迎使用其他库的建议,重点是解析.

我想要的是用大写字母提取所有单词,从任何句子中提取四个罗盘方向.例如:"比利时完全位于荷兰南部." 应找到并返回"比利时南荷兰".

我无法想象的是如何忽略(吃)任何不是指南针方向的输入.我正在寻找一些类似的东西

'many (not compassDirection >> space)'
Run Code Online (Sandbox Code Playgroud)

但g(h)oogle并没有帮助我.

以下代码显然停留在'many'函数上.

readExpr :: String -> String
readExpr input = case parse (parseLine) "" input of
    Left err -> "No match: " ++ show err
    Right val -> "Found: " ++ showVal val

parseLine :: Parser GraphValue
parseLine = do
            x <- parseCountry
            space
            many ( some (noneOf " ") >> space )
            y <- parseCompass
            space
            many ( some (noneOf " ") >> space )
            z <- parseCountry …
Run Code Online (Sandbox Code Playgroud)

haskell parsec

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

可以公开所有变量吗?

我正在写一个简单的回合制RPG系统.我有一个BattleScreen类来处理绘图...屏幕.事情是,它必须知道关于我Player班级的几乎所有事情.它Name,HP值,MP值,JobName,Level,Experience,Moneyetc.etc.etc.为了把它写在屏幕上.我的Draw()方法最终会从中抽取几乎所有变量Player,并且它要求我在Player公共场合制作几乎所有的东西

这让我相信让这个Player类自己画出来更好一点,但最后我得到了需要调用的多个Draw()方法BattleScreen.如果Player是主要播放器(具有所有数据和名称)的情况下的绘制方法,以及它在场边(只有精灵和HP/MP可见)的一个绘制方法,以及其他屏幕的其他方法.

两种方式都感觉很蠢.

这两种方式中的任何一种都被认为是"正常"吗?有没有更好的方法来设计它?

c# xna-4.0

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