小编Eri*_*tas的帖子

重用文件流

在过去,我总是使用FileStream对象来写或重写整个文件,之后我会立即关闭流.但是,现在我正在开发一个程序,我想在其中保持FileStream打开,以便允许用户在两​​次保存期间保持对文件的访问.(见我之前的问题).

我正在使用XmlSerializer将我的类序列化为from和XML文件.但是现在我保持FileStream打开,以便稍后用于保存(重新序列化)我的类实例.如果我重复使用相同的文件流而不是使用新的文件流,是否需要进行任何特殊考虑?我是否需要在保存之间将流重置为开头?如果稍后保存的大小比以前的保存小,那么FileStream将保留旧文件中的剩余字节,从而创建一个损坏的文件?我是否需要做一些事情来清除文件,以便它表现得好像我每次都在写一个全新的文件?

.net c# file-io filestream

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

将set访问器添加到类中的属性,该类派生自仅具有get访问器的抽象类

我有一个抽象类,AbsClass实现了一个接口,IClass.IClass有几个属性,只有Get访问器.AbsClass实现的属性ICLASS为抽象属性,以在从派生的类中定义AbsClass.

因此,从AbsClass派生的所有类也需要通过与Get访问器具有相同的属性来满足IClass.但是,在某些情况下,我希望能够从IClass向属性添加set访问.然而,如果我尝试使用set访问器覆盖AbsClass中的抽象属性,我会收到此错误

ConcClassA.Bottom.Set无法覆盖,因为AbsClass.Bottom没有可覆盖的set访问器

请参阅下面的ConcClassA.

如果我有一个只实现IClass接口但没有继承自AbsClass的类,那么我可以添加一个没有问题的set访问器.请参阅 下面的ConcClassB.

我可以在AbsClass的每个派生中实现IClass,而不是直接为AbsClass实现.但是我从我的设计中知道每个AbsClass也需要一个IClass,所以我宁愿在层次结构中指定更高的值.

public interface IClass
{
    double Top
    {
        get;
    }
    double Bottom
    {
        get;
    }
}

abstract class AbsClass:IClass
{
    public abstract double Top
    {
        get;
    }

    public abstract double Bottom
    {
        get;
    }
}



class ConcClassA : AbsClass
{
    public override double Top
    {
        get …
Run Code Online (Sandbox Code Playgroud)

c# abstract-class properties interface

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

使用C#.Net通过FTPS(SSL/TLS)传输文件

我正在编写一个通过FTP站点同步文件的应用程序.现在它正在通过常规FTP连接,但现在我们的IT人员希望通过安全的FTPS连接进行设置.

他们为我提供了一个*.cr_证书文件.如果我在记事本中打开文件,我会看到类似的东西(但真正的键显然不是foobar).

-----BEGIN RSA PRIVATE   
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR    
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

如何使用此证书文件连接到FTPS服务器以上载和下载文件?原谅我,但我对涉及通过网络传输文件,安全连接,证书,公钥,私钥等等的任何事情都很陌生......等等......

我想我想使用FtpWebRequest对象并将EnableSsl属性设置为true.但我不确定这个证书文件在哪里发挥作用.

c# ssl ftps ftpwebrequest

15
推荐指数
2
解决办法
7万
查看次数

如果你重新抛出它们包装另一个异常,是否可以捕获所有异常类型?

我知道你不应该编写缓存所有异常类型的代码.

try
{
  //code that can throw an exception
}
catch
{
   //what? I don't see no
}
Run Code Online (Sandbox Code Playgroud)

相反,你应该做更像下面的代码的事情,允许你没有想到的任何其他异常.

try
{
//code that can throw an exception
}
catch(TypeAException)
{
   //TypeA specific code
}

catch(TypeBException)
{
   //TypeB specific code
}
Run Code Online (Sandbox Code Playgroud)

但如果你用另一个异常包装它们,是否可以捕获所有异常类型?考虑下面的这个Save()方法我写的是Catalog类的一部分.我是否有任何错误捕获所有异常类型并返回单个自定义CatalogIOException,原始异常作为内部异常?

基本上我不希望任何调用代码必须知道可能在Save()方法中抛出的所有特定异常.他们只需要知道他们是否试图保存只读目录(CatalogReadOnlyException),目录无法序列化(CatalogSerializationException),或者是否存在写入文件的问题(CatalogIOException).

这是处理异常的好方法还是坏方法?

/// <summary>
/// Saves the catalog
/// </summary>
/// <exception cref="CatalogReadOnlyException"></exception>
/// <exception cref="CatalogIOException"></exception>
/// <exception cref="CatalogSerializingExeption"></exception>
public void Save()
{
    if (!this.ReadOnly)
    {
        try
        {
            System.Xml.Serialization.XmlSerializer serializer = new XmlSerializer(typeof(Catalog));
            this._catfileStream.SetLength(0); //clears the file …
Run Code Online (Sandbox Code Playgroud)

.net c# exception-handling

15
推荐指数
3
解决办法
1370
查看次数

无法加载文件或程序集'Xceed.Wpf.Toolkit

我正在为另一个应用程序Autodesk Revit开发一个加载项,它是作为一个单独的DLL类库构建的.我正在尝试在我的一个WPF窗口中使用Wpf工具包属性网格.属性网格在Visual Studio中显示正常,而intellisense也可以.但是当我尝试使用加载项加载启动Revit时,我得到以下异常.

System.Windows.Markup.XamlParseException occurred
  HResult=-2146233087
  Message=Could not load file or assembly 'Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4' or one of its dependencies. The system cannot find the file specified.
  Source=PresentationFramework
  LineNumber=133
  LinePosition=27
  StackTrace:
       at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
  InnerException: System.IO.FileNotFoundException
       HResult=-2147024894
       Message=Could not load file or assembly 'Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4' or one of its dependencies. The system cannot find the file specified.
       Source=mscorlib
       FileName=Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4
       FusionLog==== Pre-bind state information ===
LOG: User = GLOBAL\eric.anastas …
Run Code Online (Sandbox Code Playgroud)

c# wpf wpftoolkit revit revit-api

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

如何判断实例是某个类型还是任何派生类型

我正在尝试编写验证来检查Object实例是否可以转换为变量Type.我有一个Type实例,用于他们需要提供的对象类型.但类型可能会有所不同.这基本上就是我想要做的.

        Object obj = new object();
        Type typ = typeof(string); //just a sample, really typ is a variable

        if(obj is typ) //this is wrong "is" does not work like this
        {
            //do something
        }
Run Code Online (Sandbox Code Playgroud)

类型对象本身具有IsSubClassOf和IsInstanceOfType方法.但我真正想要检查的是objtyp的实例还是从typ派生的任何类.

看起来像一个简单的问题,但我似乎无法弄明白.

c# types casting

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

用户设置与应用程序设置与Visual Studio 2008中的资源

我对Visual Studio允许将动态值保存到项目的不同方式以及如何使用它们感到困惑.

我知道如果我需要在我的应用程序中包含像图像或声音文件这样的二进制信息,我需要将其添加到资源文件中.但是,如果我将类似文件路径的内容保存为字符串,为什么我应该在资源文件中使用或不使用应用程序settings(app.config)文件或用户设置(myapp.dll.config)文件中的字符串?

.net settings resources application-settings visual-studio-2008

14
推荐指数
2
解决办法
6988
查看次数

如何返回集合的只读副本

我有一个包含集合的类.我想提供一个返回集合内容的方法或属性.如果调用类可以修改单个对象,但我不希望它们在实际集合中添加或删除对象,这是可以的.我一直在将所有对象复制到一个新列表,但现在我想我可以将列表作为IEnumerable <>返回.

在下面的简化示例中,GetListC是返回集合的只读版本的最佳方法吗?

public class MyClass
{
    private List<string> mylist;

    public MyClass()
    {
        mylist = new List<string>();
    }

    public void Add(string toAdd)
    {
        mylist.Add(toAdd);
    }

    //Returns the list directly 
    public List<String> GetListA 
    { 
        get
            {
            return mylist;
            }
    }

    //returns a copy of the list
    public List<String> GetListB
    {
        get
        {
            List<string> returnList = new List<string>();

            foreach (string st in this.mylist)
            {
                returnList.Add(st);
            }
            return returnList;
        }
    }

    //Returns the list as IEnumerable
    public IEnumerable<string> GetListC
    {
        get 
        {
            return …
Run Code Online (Sandbox Code Playgroud)

c# collections properties readonly

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

如果不为软件公司工作,如何获得真实的编程技能

我在一家大型建筑公司的技术小组工作.虽然这里有很多人非常精通各种编程和脚本语言,但它远离软件公司开发环境的环境.很少有一两个人在开发项目上工作,其中大多数只是自动化脚本.没有源代码控制或版本控制设置或类似的东西.

我的学术背景是工程,但不是CS或CE.所以我在学校里参加了一些编程课程,当我还是个小孩的时候,实际上用VB修补了很多.然而直到去年我目前的工作才真正有机会在学校的家庭作业问题之外做任何真正的发展.在过去的一年里,我已经从简单的自动化脚本转变为C#.NET中的完整插件应用程序.

我有CS或CE专业的家人和朋友,并为主要产品是软件的公司工作.虽然没有兴趣为一家软件公司工作,但似乎他们确实比我有一个重大优势.在他们的工作中,他们拥有更多经验,可以查看他们的应有的人,并给他们建议,以改善他们的代码或逻辑.Stack Overflow等网站非常适合解决错误和获取建议,但只有当您知道需要建议时才能使用.我确信有很多次我采取完全错误的做法.

有哪些最佳方法可以改善这些现实生活中的编程技巧?有没有办法找到我可以帮助解决的开源项目(最好是.Net),这样我就可以获得与其他(更有经验的)程序员合作的经验?我也一直在研究设计模式,但很难识别何时使用某些模式.

.net c#

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

有没有理由在界面中隐藏继承的成员?

我知道从另一个类继承的类可能会使用new关键字隐藏属性.但是,这隐藏了属性的特定实现,因此我可以看到它是如何使用的.

是否有任何实际的理由在实现其他接口的接口中隐藏成员?例如,考虑以下示例.IChildInterface 实施IParentInterface和隐藏PropertyA.

interface IParentInterface
{
    string Name { get; set; }
    int PropertyA { get; set; }
    int PropertyB { get; set; }
}

interface IChildInterface : IParentInterface
{
    int PropertyA { get; set; }
    int PropertyC { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.net c# polymorphism interface

13
推荐指数
2
解决办法
2686
查看次数