C#...vb中replace方法,c#中实现的方法.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#...vb中replace方法,c#中实现的方法.相关的知识,希望对你有一定的参考价值。

vb中replace方法用法是如:我想把一段英文中的a全部转换成f,把s全部转换成c,把z全部转换为g。用法是replace("a","f","s","c","z","g").而c#中,replace函数只能有两个参数。如何实现一段文字中多个字符的转换。

自己写给函数
static string newReplace(string s,params char[] c)

if (c.Length % 2 != 0)

throw new ArgumentException("参数应成对出现", "char[] c");
return null;

StringBuilder sb = new StringBuilder(s);
int index=0;
for (int i = 0; i < c.Length; i=i+2)

sb.Replace(c[i], c[i + 1]);

return sb.ToString();
参考技术A 写多行就可以
replace("a","f");
replace("s","c")
replace("z","f")
参考技术B 前面两种方法都可以,还可以用迭代replace。
例:replace("a","f").replace("s","c").replace("z","g")
参考技术C 用正则表达式 参考技术D 嗯,迭代的比较方便一些

通过迭代基类向量在派生类中实现的调用方法

【中文标题】通过迭代基类向量在派生类中实现的调用方法【英文标题】:Call method implemented in derived classes by iterating the base class vector 【发布时间】:2021-03-01 18:19:17 【问题描述】:

我有一个关于基类和派生类的 C++ 设计问题。 代码如下:

class BaseClass:

  public:
     BaseClass();
     virtual ~BaseClass();
     //...Some basic functions for the derived Classes
     void write_data(void* data);
;

class DerivedClass1 : BaseClass

  public:
     DerivedClass1()
     ~DerivedClass1() override
     void method(Type1 data);


class DerivedClass2 : BaseClass

  public:
     DerivedClass2()
     ~DerivedClass2() override
     void method(Type2 data);

// There are hundreds of auto-created derived classes
.....

实例化派生类的类使用向量来存储实例化的派生类:

std::vector<std::unique_ptr<BaseClass>> m_factory_vector;

存储类的函数是:

template<typname Type>
void fun(Type& data)

   std::unique_ptr<BaseClass> base= std::make_unique<Type>(*file_);
   base.get()->method(data);
   m_factory_vector.push_back(base);

使用模板的原因是调用fun的函数数量未知。

现在我想遍历向量并再次调用派生类中的方法。因为这些方法通过收集缓冲区中的数据(大小为 100,但总大小未知)将不同类型的数据写入 HDF5 文件,但是收集的批处理中剩余一些数据,我想在程序结束。这是我遇到的问题,我希望我可以这样做:

for(hsize_t i=0;i<m_factory_vector.size();i++)

   m_factory_vector[i]->method();

但我知道问题是方法不在 BaseClass 中,而是在派生类中。但是派生类中的方法有不同类型的输入参数,我可能无法在 BaseClass 中声明virtual void method()。但是,我仍然想要这样的东西,这样我就可以调用将这些数据刷新到数据库中而不会丢失数据。

【问题讨论】:

虽然不方便,但名为flush 的虚拟方法似乎是最直接的方法... 【参考方案1】:

如果不重新设计你的设计,你可以使用dynamic_cast

for (hsize_t i=0;i<m_factory_vector.size();i++)

   if (auto* p = dynamic_cast<DerivedClass1>(m_factory_vector[i]->get()))
       p->method();
   else if (auto* p = dynamic_cast<DerivedClass2>(m_factory_vector[i]->get()))
       p->method();
   // ...

【讨论】:

我已经考虑到了这一点。但是有数百个派生类。并且使用了哪个类也不得而知。这就是我使用模板实例化类的原因。 如果你不知道类,通用接口又不够用,你想怎么用呢? @JianyuanMa 然后把方法放到基类中。使其虚拟化。 @Jarod42 正如用户所知,类调用模板函数很有趣。但问题是基类向量的使用不在用户调用模板函数的地方。而且我想以一般的方式使用这个向量,那么用户不需要考虑添加另一个dynamic_cast。另外可能有很多函数叫做模板函数,但是对于vector本身并不知道实例化了哪个派生类。 如果你想以通用的方式使用vector,只能使用interface,所以你可能必须丰富它(建议virtual void flush() /*= 0*/;方法)。

以上是关于C#...vb中replace方法,c#中实现的方法.的主要内容,如果未能解决你的问题,请参考以下文章

全自动荧光免疫分析仪系统是如何在FET4418-C核心板中实现的

安装 BPL 以及在其他 BPL 中实现的组件

调用 Swift 协议扩展方法而不是子类中实现的方法

如何解决在离子3中实现搜索栏的管道时出现的错误(管道搜索找不到或未找到)

如何在选择案例语句中实现枚举

确定子类是不是具有在 Python 中实现的基类方法