Javascript 在给定新值时重写字符串
这个题目听起来很奇怪,但我在用正确的英语提问时遇到了困难。我想做什么Javascript 在给定新值时重写字符串,javascript,c#,html,Javascript,C#,Html,这个题目听起来很奇怪,但我在用正确的英语提问时遇到了困难。我想做什么 String question = ""; String message = "This message has the following question:\n" + question; ...//later on the code question = question.path.readingFromAFile(FileAddress); 因此,我正在构建一条通过邮件发送的消息,我需要检索一段html文件中的文
String question = "";
String message = "This message has the following question:\n" + question;
...//later on the code
question = question.path.readingFromAFile(FileAddress);
因此,我正在构建一条通过邮件发送的消息,我需要检索一段html文件中的文本并将其插入到消息中
问题是:在我需要构建消息的地方,文件还没有正确存在,而且由于它不存在,我无法找到它(显然)。我的想法是在消息中输入一个“空”变量,在创建文件时,我会更新变量值,并将其发送到之前创建的字符串。然而,我不确定这是否可行,我考虑过像占位符之类的东西,但我不确定这将如何工作。如果您能提供任何帮助,我将不胜感激,我也为之前的误解道歉,我很难用英语正确解释这个问题,如果有任何不清楚的地方,请告诉我。听起来您需要字符串模板 一个类似的问题 有一些图书馆可以帮助你喜欢 及
听起来你需要字符串模板 一个类似的问题 有一些图书馆可以帮助你喜欢 及 免责声明
因为这大概是关于插入一个字符串,所以我可以建议一个简单的解决方案。然而;如果您的范围大大扩展(例如,要填充的模板字段太多,或者文本块太大),我建议您考虑一个更健壮的解决方案 人们通常只使用
String.format()
的format参数作为字符串文字,但您也可以更早地创建一个格式字符串,并且只在需要填充模板时调用String.format()
,使用您提前编写的格式字符串
免责声明因为这大概是关于插入一个字符串,所以我可以建议一个简单的解决方案。然而;如果您的范围大大扩展(例如,要填充的模板字段太多,或者文本块太大),我建议您考虑一个更健壮的解决方案
人们通常只使用
String.format()
的format参数作为字符串文字,但您也可以更早地创建一个格式字符串,并且只在需要填写模板时调用String.format()
,使用您提前编写的格式字符串。所有其他答案都涉及模板化。但在我看来,你可能想要一个出版商订阅模式
设置:您需要一个classMyClass
来拥有一个事件广播器。然后无论什么时候发生了什么,你都会调用这个。但是你的调用者不在乎谁在看
public class MyClass {
public virtual event EventHandler BroadcastHandler;
public virtual void BroadcastEvent(string question) {
var broadcastHandler = BroadcastHandler;
var eventArg = new ObservableEvent(question);
if(broadcastHandler != null)
broadcastHandler(this, eventArg);
}
public void UploadFile() {
// Some logic... etc...
// Invoke the event
this.BroadcastEvent(question.path.readingFromAFile(FileAddress))
}
}
然后您需要一个观察者类来观察此特定事件:
public class Observer {
private readonly object syncRoot = new object();
public string Question { get; private set; }
// Basic constructor.
public Observer() {}
public void HandleEvent(object sender, EventArgs args) {
lock(this.syncRoot) {
var theEvent = (ObservableEvent)eventArgs;
this.Question = theEvent.Question;
}
}
}
public class ObservableEvent : EventArgs {
public string Question {get; private set;}
public ObservableEvent(string question) {
this.Question = question;
}
}
告诉观察员订阅活动:
var observer = new Observer();
var myClass = new MyClass();
myClass.BroadcastHandler += observer.HandleEvent;
现在只需使用字符串模板来使用您的问题:
var message = $"This message has the following question:\n{observer.Question}"
所有其他答案都涉及模板。但在我看来,你可能想要一个出版商订阅模式
设置:您需要一个classMyClass
来拥有一个事件广播器。然后无论什么时候发生了什么,你都会调用这个。但是你的调用者不在乎谁在看
public class MyClass {
public virtual event EventHandler BroadcastHandler;
public virtual void BroadcastEvent(string question) {
var broadcastHandler = BroadcastHandler;
var eventArg = new ObservableEvent(question);
if(broadcastHandler != null)
broadcastHandler(this, eventArg);
}
public void UploadFile() {
// Some logic... etc...
// Invoke the event
this.BroadcastEvent(question.path.readingFromAFile(FileAddress))
}
}
然后您需要一个观察者类来观察此特定事件:
public class Observer {
private readonly object syncRoot = new object();
public string Question { get; private set; }
// Basic constructor.
public Observer() {}
public void HandleEvent(object sender, EventArgs args) {
lock(this.syncRoot) {
var theEvent = (ObservableEvent)eventArgs;
this.Question = theEvent.Question;
}
}
}
public class ObservableEvent : EventArgs {
public string Question {get; private set;}
public ObservableEvent(string question) {
this.Question = question;
}
}
告诉观察员订阅活动:
var observer = new Observer();
var myClass = new MyClass();
myClass.BroadcastHandler += observer.HandleEvent;
现在只需使用字符串模板来使用您的问题:
var message = $"This message has the following question:\n{observer.Question}"
您可以使用带有真实条件的while循环,并在读取返回所需值时将其中断,或者使用.net计时器并设置间隔,在读取完成时将其中断。您可以使用模板,或者稍后简单地创建完整问题。您可以使用带有真实条件的while循环,并在读取返回所需值时将其中断,或者使用.net计时器设置一个时间间隔,在阅读完成后将其打断。您可以使用模板,也可以稍后创建完整的问题。